Почему, когда мы перечисляем все элементы списка для каждого списка в списке списков, нам нужен определенный c порядок в предложениях for in? - PullRequest
0 голосов
/ 06 апреля 2020

Я говорю о порядке пунктов for in.

Этот порядок работает:

[print(element) for element_list in list_of_lists for element in element_list]

, а это не так:

[print(element) for element in element_list for element_list in list_of_lists]

Лично я нахожу второе более читабельным.

1 Ответ

1 голос
/ 07 апреля 2020

Причина довольно проста. Я предполагаю, что мы договариваемся о списках, являющихся упорядоченной коллекцией, поэтому никаких проблем нет. Почему заказ? Это очень просто запомнить, если вы думаете, что это так:

(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] Закончено!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...