For循环更改原始列表变量

时间:2019-12-04 22:39:55

标签: python for-loop iteration

Python经验有限的人的快速提问。因此,我在列表中有一些列表。我想遍历它,在每次迭代中添加一些内容,然后将其存储在其他列表中。

例如:

var=[[1],[2],[3]]
var2 = []

for item in var:
    var2.append(item.append("x"))

但是,我得到的是var2,而不是[[1, 'x'], [2, 'x'], [3, 'x']][None, None, None]的预期输出

我正打算将我的原始变量var重用于其他目的。但是,var现在等于[[1, 'x'], [2, 'x'], [3, 'x']]

这是怎么回事?

3 个答案:

答案 0 :(得分:3)

append函数修改其输入。因此,当您调用item.append(...)时,您正在修改item,这是对var中元素之一的引用。

您可以通过以下方式最少复制此

var=[[1],[2],[3]]

for item in var:
    item.append("x")

此外,append的返回值为None,因此您可以有效地为每个项目调用var2.append(None),解释您的var2结果。

为避免这种情况,请使用非破坏性方法来返回所需的值,例如

var=[[1],[2],[3]]
var2 = []

for item in var:
    var2.append(item + ["x"])

或者,更好的是,

var=[[1],[2],[3]]
var2 = [item + ["x"] for item in var]

答案 1 :(得分:2)

如果您同时引用docs list.append和其他内容,则返回None,这就是您要附加的内容。因此,您需要在返回值时串联或扩展列表。我建议使用item + ['x'],以便您的循环如下所示:

for item in var:
    var2.append(item + ['x'])

尽管为什么不为此使用列表理解?

var=[[1],[2],[3]]
var2 = [item + ['x'] for item in var]

结果:

[[1, 'x'], [2, 'x'], [3, 'x']]

答案 2 :(得分:0)

您的for循环是罪魁祸首。这并不难,但是我们必须确保嵌套列表追加中发生了什么。

我对此的解决方案是:

var=[[1],[2],[3]]
var2 = []

for i in range(len(var)):
  list = []
  list.append(var[i][0])
  list.append('x')
  var2.append(list)

print(var)
print(var2)
>>> [[1], [2], [3]]
>>> [[1, 'x'], [2, 'x'], [3, 'x']]

即使写起来可能很直观:

for list in var:
  list.append('x')
  var2.append(newList)

这也会更改原始var列表中列表中的值。