【问题标题】:List not appending properly [duplicate]列表未正确附加[重复]
【发布时间】:2018-07-18 02:07:38
【问题描述】:

如果我有将 1 个列表附加到另一个列表的代码:

nlis = [2, 4, 6, 8]
k = []
k.append(nlis)
print(k)
for i in range(4):
    nlis[i] += 1
k.append(nlis)
print(k)

由于某种原因,此输出:

[[2, 4, 6, 8]]
[[3, 5, 7, 9], [3, 5, 7, 9]]

[2, 4, 6, 8] 变为 [3, 5, 7, 8]

我怎样才能使它输出:

[2, 4, 6, 8]
[[2, 4, 6, 8], [3, 5, 7, 9]]

【问题讨论】:

  • 您需要附加列表的副本,而不是列表本身:k.append(nlis[:])
  • 我编辑了我的答案
  • 它工作正常。您将同一个列表附加到另一个列表两次,并增加同一个列表中的每个值
  • 我不想复制我的列表,因为在我的真实程序中,这会占用 100 个列表。
  • 当您分配给nlis(特别是它的元素)时,您正在重用它的内存。你要么避免这种情况,要么从那里复制。

标签: python python-3.x list append


【解决方案1】:

试试这个:

nlis = [2, 4, 6, 8]
nlis2=[]
nlis2.extend(nlis)
k = []
k.append(nlis2)
k.append(nlis)
print(k[0])
for i in range(4):
    nlis[i] += 1
print(k)

输出:

[2, 4, 6, 8]

[[2, 4, 6, 8], [3, 5, 7, 9]]

或者:

nlis = [2, 4, 6, 8]
k = []
k.append(nlis)
print(k[0])
nlis2=nlis[:]
for i in range(4):
    nlis2[i] += 1
k.append(nlis2)
print(k)

【讨论】:

  • 我不想在不复制列表的情况下执行此操作,因为我的实际程序需要多次执行此操作,并且我可以创建 100 个列表。
  • @Nexus 编辑了我的答案
【解决方案2】:

.append() 会将您放入其中的任何内容作为单个值添加到您的列表中。相反,请使用.extend()。如k.append(nlis)

【讨论】:

  • 这并不能回答整个问题
  • 我不想使用扩展。我不希望每个列表都是分开的。
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 2019-08-22
  • 2016-07-14
  • 2020-03-09
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多