[英]For loop changes original list variable
来自 Python 经验有限的人的快速提问。 所以我在列表中有一些列表。 我想遍历它,在每次迭代中附加一些内容,然后将其存储在不同的列表中。
例如:
var=[[1],[2],[3]]
var2 = []
for item in var:
var2.append(item.append("x"))
然而,不是[[1, 'x'], [2, 'x'], [3, 'x']]
var2
的预期输出,我得到[None, None, None]
我打算重用我的原始变量var
,用于不同的目的。 然而, var
现在等于[[1, 'x'], [2, 'x'], [3, 'x']]
这里发生了什么?
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]
如果您参考文档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']]
你的 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
列表中列表中的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.