簡體   English   中英

For 循環更改原始列表變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM