Во-первых, это называется СПИСКОВОЕ ВКЛЮЧЕНИЕ. Ни за что бы не догадалась. Для краткости listcomp. Что б у них всё было хорошо, у тех кто это название придумывал.
Списковое включение умеет строить новый список и больше ничего.
Вот такой код
даст на выходе вот такой списочек:
[97, 98, 99, 100] - коды abcd, потому что код $ = 36.
То есть для каждого символа в строке symbols применяем функцию, проверяем условие и кладем в списочек.
Меня конечно больше всего смущала запись
почему два раза s? но если логика, что первое s - это то, что пойдет в новый список, вторая s - итератор, то вроде уже всё нормально. Перебираем коллекцию и суем каждый элемент в новый список.
Можно сгенерировать список элементов декартова произведения двух и более итерируемых объектов.
на выходе получится:
[('black', 's'), ('black', 'm'), ('black', 'l'), ('white', 's'), ('white', 'm'), ('white', 'l')]
Вот так тоже работает:
[('black', 's'), ('black', 'm'), ('black', 'l'), ('red', 's'), ('red', 'm'), ('red', 'l')]