Python Language Compréhension de liste imbriquée


Exemple

Les compréhensions de liste imbriquées, contrairement aux compréhensions de liste avec des boucles imbriquées, sont des compréhensions de liste dans une compréhension de liste. L'expression initiale peut être n'importe quelle expression arbitraire, y compris une autre compréhension de la liste.

#List Comprehension with nested loop
[x + y for x in [1, 2, 3] for y in [3, 4, 5]]
#Out: [4, 5, 6, 5, 6, 7, 6, 7, 8]

#Nested List Comprehension
[[x + y for x in [1, 2, 3]] for y in [3, 4, 5]]
#Out: [[4, 5, 6], [5, 6, 7], [6, 7, 8]]

L'exemple imbriqué est équivalent à

l = []
for y in [3, 4, 5]:
    temp = []
    for x in [1, 2, 3]:
        temp.append(x + y)
    l.append(temp)

Un exemple où une compréhension imbriquée peut être utilisée pour transposer une matrice.

matrix = [[1,2,3],
          [4,5,6],
          [7,8,9]] 

[[row[i] for row in matrix] for i in range(len(matrix))]
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

Comme for boucles imbriquées, il n'y a pas de limite à la façon dont les compréhensions profondes peuvent être imbriquées.

[[[i + j + k for k in 'cd'] for j in 'ab'] for i in '12']
# Out: [[['1ac', '1ad'], ['1bc', '1bd']], [['2ac', '2ad'], ['2bc', '2bd']]]