【问题标题】:Why does appending a list to itself show [...] when printed?为什么在打印时将列表附加到自身显示[...]?
【发布时间】:2015-05-24 19:48:17
【问题描述】:

当我使用以下代码自行附加列表时。

a = [1, 2, 3, 4]
print a

a.append(a)
print a

我期待输出是......

[1, 2, 3, 4]
[1, 2, 3, 4, [1, 2, 3, 4]]

但它是这样的......

[1, 2, 3, 4]
[1, 2, 3, 4, [...]]

为什么?

【问题讨论】:

标签: python list python-2.7 python-3.x


【解决方案1】:

您正在将a 添加到a 本身。 a 的第二个元素仅是 a。所以,如果它尝试打印a,就像你想要的那样

  • 它将打印第一个元素[1, 2, 3, 4]
  • 它会打印第二个元素,实际上是a

    • 它将打印第一个元素[1, 2, 3, 4]
    • 它会打印第二个元素,实际上是a

      • 它将打印第一个元素[1, 2, 3, 4]
      • 它将打印第二个元素,实际上是a ...

你知道它是怎么回事,对吧?它将无限地进行。因此,当存在这样的循环引用时,Python 会将其表示为一对方括号内的省略号,仅[...]

如果您想按原样插入a 的副本,则可以使用slicing 创建一个新列表,如下所示

>>> a = [1, 2, 3, 4]
>>> a.append(a[:])
>>> a
[1, 2, 3, 4, [1, 2, 3, 4]]

【讨论】:

  • 是否表示它类似于 [1, 2, 3, 4, [1, 2, 3, 4, [1, 2, 3, 4, [...]]] ] ?我可以在其中使用循环来获得“我的预期结果”吗?
  • @Myni 我在回答中建议的解决方案会给你预期的结果。
  • “(a[:])”是做什么的,@thefourtheye?
  • @Myni 它将创建列表a 的副本。它被称为slicing notation
  • @Myni 通常切片符号会创建一个新列表并返回切片列表。在这种情况下,由于没有提及开始、结束和步骤,它将创建整个列表的副本。
【解决方案2】:

您也可以使用 for 循环添加它们,但最终会得到一个大列表。

a = [1, 2, 3, 4]

lengthOfA = len(a)

for x in range(0, lengthOfA):
    item = a[x]
    a.append(item)

print a #Answer is [1, 2, 3, 4, 1, 2, 3, 4]

我喜欢这个答案,因为它不会创建一个嵌套列表,但如果这不是你想要的,请放弃这个答案。

如果您想在列表中添加一个列表,您可以使用 thefourtheye's awnser。

a = [1, 2, 3, 4]

a.append(a[:])

print a #Answer is [1, 2, 3, 4 [1, 2, 3, 4]]

【讨论】:

  • 有一种更简单的方法:a.extend(a)。顺便说一句,这个词是“答案”而不是“遮阳篷”。
  • 是的@Jammeh 我想要一个列表中的列表,有没有办法?
  • @Myni:thefourtheye 向您展示了如何将a 列表的副本附加到a。他的回答有什么问题?
  • 拼写错误已修复和编辑的答案包括 thefourtheye's awnser
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
相关资源
最近更新 更多