Python Glossary English

все Python 3Списки (list)понятие

Вложенный list comprehension

comprehension

List comprehension может содержать несколько вложенных for, что позволяет строить вложенные списки или «разворачивать» матрицы в плоский список.

Синтаксис

[[выражение for j in inner] for i in outer]

Порядок for-ов читается слева направо ровно как вложенные циклы сверху вниз: сначала внешний for row in matrix, потом внутренний for x in row. Написать [x for x in row for row in matrix] — самая частая ошибка: имя row там ещё не определено, и вы получите NameError. Для транспонирования проще zip(*matrix), а глубже двух уровней вложенности обычный цикл читается лучше выражения.

Примеры

matrix = [[1,2,3],[4,5,6],[7,8,9]]
flat = [x for row in matrix for x in row]
print(flat)   # → [1, 2, 3, 4, 5, 6, 7, 8, 9]
trans = [[row[i] for row in matrix] for i in range(3)]
print(trans)  # → [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
pairs = [(i,j) for i in range(3) for j in range(3) if i != j]
print(len(pairs))  # → 6
sq = [[i*j for j in range(1,4)] for i in range(1,4)]
print(sq[0])  # → [1, 2, 3]

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности