簡體   English   中英

通過迭代列表追加項目

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

3份,以全部統治。

另外,作為一個補充說明:您應該更改變量的名稱。 例如,通過將參數聲明為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.

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