很多在python生成器中的一行

Sta*_*ham 2 python for-loop list generator

我无法理解在这样的一个生成器中使用多个"for"的代码,我搜索了Google并没有找到任何答案:

print [j for i in [[1,2],[4,6]] for j in i ]
# will print [1, 2, 4, 6]

print [j for j in i for i in [[1,2],[4,6]] ]
# will print [4, 4, 6, 6]
Run Code Online (Sandbox Code Playgroud)

有什么不同?

如何解释这样的代码?

bst*_*h24 5

希望扩展可以帮助您推理代码.在我看来,这种方式更具可读性.我一次打印一个元素而不是整个列表.

print [j for i in [[1, 2], [4, 6]] for j in i]
Run Code Online (Sandbox Code Playgroud)

相当于

for i in [[1, 2], [4, 6]]:
    for j in i:
        print j
Run Code Online (Sandbox Code Playgroud)

结果i = [4, 6].

现在,

print [j for j in i for i in [[1,2],[4,6]]]
Run Code Online (Sandbox Code Playgroud)

相当于

for j in i: # Remember, i = [4, 6]
    for i in [[1, 2], [4, 6]]:
        print j
Run Code Online (Sandbox Code Playgroud)

  • @MadPhysicist变量`i`从第一个列表理解中泄露出来,所以它已经被定义为第二个.它没有像它看起来那样做. (4认同)