使用嵌套列表将comp变量作为范围参数列出?

时间:2018-12-16 18:50:20

标签: python list-comprehension nested-loops

我正在努力理解此列表理解,但还有更多问题:

x = [[c for c in range(r)] for r in range(3)]
print(x)
>>>[[],[0],[0,1]]

据我了解,这将相应地细分:

x = []
for r in range(3):
  for c in range(r):
    x.append(c)
print(x)
>>>[0,0,1]

但是,我的解压缩版本没有返回列表列表,例如列表理解。 我最大的问题是:

1)在这种情况下range(r)会变成什么?
2)如何纠正我的for循环以使输出与列表理解相同?

3)为什么列表理解会列出它所做的列表?

1 个答案:

答案 0 :(得分:4)

您的解压缩版本与列表理解的版本不同,它们不相同。等同于列表理解的是:

a = []
for r in range(3):
    x = []
    for c in range(r):
        x.append(c)
    a.append(x)
print(a)
>>> [[],[0],[0,1]]

请注意,在列表组合中,您每次迭代都创建一个新列表,而在解压缩的示例中,您只是将其追加到同一列表中。

您提供的解压缩版本的列表理解示例为:

x = [c for r in range(3) for c in range(r)]