[英]Appending Items by Iterating list
我設計了以下函數,該函數將列表作為參數並返回另一個列表。
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A)
return B
在此函數中,我假定該函數將根據A的當前狀態將A追加到A。在該假設下工作。 我叫這個功能
>>> test([1,2,3,4,5])
預期輸出為
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
但是,我得到的結果是
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
為什么是這樣? 有沒有解決這個問題的辦法?
您需要按值復制它。 在當前情況下,您正在通過引用。 因此,每個索引都會隨着A
變化而更新。 應該:
B.append(A[:])
請注意[:]
用於按值復制。
為了澄清, 在這里運行您的代碼,我們可以檢查在[1,2]
上調用function
的結果:
現在,考慮當我們制作副本時會發生什么:
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A[:])
return B
print function([1,2])
另外,作為一個補充說明:您應該更改變量的名稱。 例如,通過將參數聲明為list
可以隱藏list
方法。
您可以將A
的副本附加到B
以避免使用與A
相同的引用:
for num in list:
A.append(num)
B.append(A[:])
列表通過引用傳遞。 要復制它們,請使用語法B.append(A[:])
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A[:])
return B
在您的代碼中,您發送引用而不是數據。
工作代碼
def function(list):
A = []
B = []
for num in list:
A.append(num)
B.append(A[:])
return B
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.