все 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Сообщить о неточности