【问题标题】:Creating a multidimensional list and appending element[] [duplicate]创建多维列表并附加元素[] [重复]
【发布时间】:2016-04-01 01:08:36
【问题描述】:

我只想将 [1] 附加到主列表树的第一个列表元素,但 [1] 会附加到每个列表元素。

tree = [[]] * 5
tree[0].append([1])
print tree

>>>[[[1], [1], [1], [1], [1]]]

我想要什么:

>>>[[[1]],[],[],[],[]]

【问题讨论】:

标签: python python-2.7


【解决方案1】:

您创建列表的方式 (tree = [[]] * 5) 是问题所在。列表中的所有 5 个列表都是相同的对象,您可以在使用方法 id() 时看到:

>>> tree = [[]] * 5
>>> id(tree[0])
139859652123032
>>> id(tree[1])
139859652123032

解决办法是:

>>> tree = [[], [], [], [], []]
>>> tree[0].append([1])
>>> tree
[[[1]], [], [], [], []]

【讨论】:

    【解决方案2】:

    我的问题是与 * 相乘会创建相同元素的引用。我应该使用:

    tree = [[] for i in xrange(5)]
    

    【讨论】:

      【解决方案3】:

      使用 for 语句迭代并添加每个分支

      tree = [[] for i in xrange(5)]   
          # xrange() and range() will have the same result, but the former is a cheaper iterator
      

      最后,将 '[1]' 附加到第一个列表

      tree[0].append([1])
      

      【讨论】:

      • 你不应该真的使用列表组合来产生副作用,你为什么不只是 tree = [[] for i in xrange(4)]
      • 我想是个人喜好。 *添加到我的答案中。
      猜你喜欢
      • 2020-09-18
      • 2021-10-06
      • 2020-12-04
      • 1970-01-01
      • 2021-10-02
      • 2017-04-16
      • 2020-12-11
      • 2020-07-07
      • 1970-01-01
      相关资源
      最近更新 更多