Причина довольно проста. Я предполагаю, что мы договариваемся о списках, являющихся упорядоченной коллекцией, поэтому никаких проблем нет. Почему заказ? Это очень просто запомнить, если вы думаете, что это так:
(elt for subl in lists for elt in subl)
- это то же самое, что и
for subl in lists:
for elt in subl:
yield elt
Итак, все, что вам нужно сделать, чтобы изменить последнее если раньше было «развернуть» вложенное значение для l oop, удалив двоеточия, то уже выделенный справа блок затем сдвигается вправо, а выражение yield выводится вперед.
Если это трудно начать с Я рекомендую написать понимание так, чтобы вы сначала записали части l oop, пропустили двоеточия и символы новой строки и поместили туда возвращенную часть последней. То есть
1.
for subl in lists
for elt in subl
2.
[for subl in lists for elt in subl]
, отметьте «скольжение» к правому концу
3.
[elt for subl in lists for elt in subl]
Закончено!