【问题标题】:Making empty nested list with list comprehension vs multiplicatoi [duplicate]使用列表理解与 multiplicatoi 制作空嵌套列表 [重复]
【发布时间】:2017-04-28 05:30:58
【问题描述】:

我正在一个编码网站上尝试一些问题,其中一个问题要求用户制作一个 n 大小的空嵌套列表。所以很自然地,我的第一个倾向就是像这样相乘:

list = [[0]*n]*n

但这不起作用,因为其余代码进入列表并更改了值,并且此解决方案出现了超出范围的错误。 但是,下面的代码确实有效。

list = [[0]*n for _ in range (n)]

我想知道这是怎么回事。据我所知,我的 IDLE 中的结果是相同的。

谢谢

【问题讨论】:

  • 尝试从其中一个列表中修改一个元素,然后重新检查结果。你会发现它们并不相同。
  • 特别是你的问题:stackoverflow.com/a/6667529/3579910
  • “子列表中意外反映的列表更改列表”可能最接近这个问题。其他两个不是。

标签: python list nested


【解决方案1】:

这是初学者面临的众所周知的陷阱。当* 运算符用于列表时,对象引用会重复。不制作列表副本。您可以通过对列表元素执行id() 来检查它。

第二段代码分别创建n 列表。因此,每个对象都有自己独特的对象引用。

更新: 这在 Udacity 上被记录为第一个陷阱:https://www.udacity.com/wiki/common-python-pitfalls

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多