【问题标题】:A sequence of empty lists of length n in Python? [duplicate]Python中长度为n的空列表序列? [复制]
【发布时间】:2014-05-12 14:51:55
【问题描述】:

在 python 中[]*2,给出[]

获取[[],[]] 的最简单方法是什么?

【问题讨论】:

标签: python list sequence


【解决方案1】:

你可能想要:

[[] for _ in range(n)]

与[[]] * n 不同,这将为您提供唯一 内部列表(附加到一个 不会附加到它们全部)。例如:

>>> x = [[] for _ in range(n)]
>>> x[0].append(1) 
>>> x
[[1], [], []]

相比:

>>> x = [[]] * 3
>>> x[0].append(1)
>>> x
[[1], [1], [1]]

请注意,后一个习语 ([[]] * n) 是一个非常常见的错误,在不同的上下文中经常出现。

【讨论】:

    【解决方案2】:

    使用理解:

    [[] for _ in range(2)]
    

    【讨论】:

      【解决方案3】:

      这是因为(例如)[1]*3 给出了[1,1,1],即包含列表内容的序列。

      因此您想复制值[]:

      a = [[]]*2
      

      给予

      [[], []]
      

      由于* 运算符的工作方式,这会给出same 列表的副本。因此,如果您尝试修改这些内部空列表中的任何一个,它都会影响它们。 (因为它们是空的,你唯一能做的就是追加它们;即,a[0].append(1) 给出[[1],[1]]。)这可能是你想要的,但不太可能。

      【讨论】:

      • 现在试试a = [[]]*2; a[0].append(1); print a
      • 出于同样的原因,我们对所有其他已删除的答案投了反对票。
      • 您的解决方案不会创建唯一列表。两个内部列表都引用同一个对象,因此如果您对其中一个执行任何就地操作,其他列表也会受到影响
      • 是的,这可能不是 OP 想要的。但它没有很好地指定......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多