【问题标题】:List comp variable as a range argument using nested list? [closed]使用嵌套列表将 comp 变量作为范围参数列出? [关闭]
【发布时间】:2018-12-16 18:50:19
【问题描述】:

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

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) 为什么列表推导式会列出它所做的列表?

【问题讨论】:

  • 您忘记在外部循环的每次迭代中初始化内部列表。
  • 为什么不for r in range(3): x.append(list(range(r)))
  • 为什么不直接使用推导并删除循环?

标签: python list-comprehension nested-loops


【解决方案1】:

您的解压版本与列表理解版本不同,它们不等价。与列表推导等效的是:

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)]

【讨论】:

    猜你喜欢
    • 2023-01-15
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多