这个记忆技巧对我帮助很大:
[ <返回值> <外循环1> <内循环2> <内循环3> ... <可选条件> ]
现在你可以将 返回值 和 外循环 视为唯一的 右 顺序
了解了上述内容,即使是三重循环的列表推导式看起来也很容易:
c=[111, 222, 333]
b=[11, 22, 33]
a=[1, 2, 3]
print(
[
(i, j, k) # <RETURNED_VALUE>
for i in a for j in b for k in c # in order: loop1, loop2, loop3
if i < 2 and j < 20 and k < 200 # <OPTIONAL_IF>
]
)
[(1, 11, 111)]
因为上面只是一个:
for i in a:
for j in b:
for k in c:
if i < 2 and j < 20 and k < 200:
print((i, j, k))
对于迭代一个嵌套的列表/结构,技巧是一样的:
对于问题中的 a
:
a = [[1,2],[3,4]]
[i2 for i1 in a for i2 in i1]
which return [1, 2, 3, 4]
对于另一个嵌套级别
a = [[[1, 2], [3, 4]], [[5, 6], [7, 8, 9]], [[10]]]
[i3 for i1 in a for i2 in i1 for i3 in i2]
which return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
等等,诸如此类