嵌套列表的理解与嵌套for循环不同

时间:2020-05-11 20:37:59

标签: python for-loop list-comprehension nested-loops

我有以下嵌套循环:

for i in range(1,5): 
        for j in range(0,i):
                j

当我尝试使用列表理解来重新表达相同的结果时,会得到奇怪的结果

[j for j in range(0,i) for i in range(1,5)]

首先,有人可以通过此列表理解来解释输出吗?我似乎不太了解Python在这里做什么。

第二,内部for的迭代器是否可以不显式依赖外部索引?

第三,有什么方法可以修改列表理解,以获得与开始时编写的嵌套for循环相同的结果?

1 个答案:

答案 0 :(得分:1)

您的列表理解不会执行任何操作,因为如果没有在列表理解之外定义i,它就不会运行。

要实现您想要的目标(是的,这很直观),您需要执行以下操作:

[j  for i in range(1,5) for j in range(0,i)]

这将产生:

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

这与嵌套的for循环的顺序相同。