вложенные списки
1318 просмотра
3 ответа
Я попытался использовать значение понимания внешнего списка во внутреннем:
[ x for x in range(y) for y in range(3) ]
Но, к сожалению, это вызывает ошибку NameError, потому что имя y
неизвестно (хотя его определяет внешний список).
Это ограничение Python (пробовал 2.7.3 и 3.2.3) или есть веская причина, почему это не может работать?
Есть ли планы избавиться от ограничения?
Есть ли обходные пути (какой-то другой синтаксис, возможно, я не понял) для достижения того, чего я хочу?
Автор: Alfe Источник Размещён: 12.11.2019 09:07Ответы (3)
16 плюса
Вы говорите о списочном понимании , а не о выражениях генератора.
Вам нужно поменять местами петли:
[ x for y in range(3) for x in range(y) ]
Вы должны прочитать их, как если бы они были вложены в обычный цикл:
for y in range(3):
for x in range(y):
x
Понимания списка с несколькими циклами следуют в том же порядке. Смотрите список документов для понимания :
Когда предоставляется понимание списка, оно состоит из одного выражения, за которым следует хотя бы одно
for
предложение и ноль или болееfor
илиif
предложения. В этом случае элементы нового списка являются те , которые будут получены при рассмотрении каждого изfor
илиif
Морозов блока, гнездящиеся слева направо, и вычисление выражения для получения списка элементов каждый раз , когда будет достигнут самый внутренний блок.
То же самое относится и к выражениям генератора, но они используют ()
круглые скобки вместо квадратных скобок и не сразу материализуются:
>>> (x for y in range(3) for x in range(y))
<generator object <genexpr> at 0x100b50410>
>>> [x for y in range(3) for x in range(y)]
[0, 0, 1]
Автор: Martijn Pieters
Размещён: 13.08.2012 12:42
1 плюс
Ты пробовал:
[x for y in range(3) for x in range(y)]
Потому что это производит вывод ... Это производит:
[0, 0, 1]
Который может или не может быть тем, что вы хотели ....
Автор: Daren Thomas Размещён: 13.08.2012 12:440 плюса
просто гнездо другого поколения.
[ x for x in [range(y) for y in range(3) ]]
дает мне:
[[], [0], [0, 1]]
Автор: Inbar Rose
Размещён: 13.08.2012 12:43
Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- list Функция транспонирования / распаковки (обратная сторона zip)?
- list How would you make a comma-separated string from a list of strings?
- list Удалить дубликаты из списка <T> в C #
- list Console.WriteLine и общий список
- list Как проверить, если список пуст?
- syntax Как вы форматируете unsigned long long int, используя printf?
- syntax Как вы передаете функцию в качестве параметра в C?
- syntax Что ** (двойная звезда / звездочка) и * (звездочка / звездочка) делают для параметров?
- syntax Может кто-нибудь объяснить __all__ в Python?
- syntax Какая польза от квадратных скобок [] в операторах sql?
- list-comprehension Выражения генератора и понимание списка
- list-comprehension Как эффективно отфильтровать вычисленные значения в понимании списка Python?
- list-comprehension Почему результаты map () и понимания списка различны?
- list-comprehension Понимание списка в Ruby
- list-comprehension Сглаживание мелкого списка в Python