列表理解如何适用于两个 for 循环?

How list comprehension works for two for loop?

这是两个for循环代码,内层循环依赖于第一个循环。当我尝试创建列表压缩时,它给出了错误的结果。请指出缺少的内容。

for i in range(5):
    for j in range(i):
        print(j, end=', ')
print()

print([j for j in range(i) for i in range(5)])

输出:

0, 0, 1, 0, 1, 2, 0, 1, 2, 3,
[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]

谢谢!!!

在你从上到下阅读 for 循环的地方,你在列表理解中从左到右阅读生成器。

#              outer/first       inner/second
>>> print([j for i in range(5) for j in range(i)])
[0, 0, 1, 0, 1, 2, 0, 1, 2, 3]

您在问题中使用的示例仅有效,因为当您 运行 range(i) 时,i 仍然是从先前的 for 循环定义的。如果您尝试 运行 在新的解释器中,您将在 i 上得到 NameError