簡體   English   中英

“+”與 python 列表中的 append

[英]"+" vs append in list in python

我正在嘗試在 python 中實現 bestSum 算法,並且我在第 13,14 行有以下腳本。

memo = {}
def bestSum(s, l):
    if s == 0:
        return []
    elif s < 0:
        return None
    elif s in memo:
        return memo[s]
    minList = None
    for i in l:
        temp = bestSum(s-i, l)
        if temp != None:
            temp = temp + [i] #This works LINE13
            # temp.append(i) This does not work LINE14
            if minList == None or len(temp) < len(minList):
                minList = temp

    memo[s] = minList
    return minList

我知道“+”運算符返回一個新列表,而 append function 會改變原始列表。

我的問題是為什么它在我的代碼中很重要,因為臨時列表僅在接下來的幾行中使用。 為什么他們給出不同的輸出。

問題不在於append(i)+ [i]之間的區別,而在於對象在 python 中的工作方式。 你差一點就搞定了。

首先, minilist = temp使minilist引用 object temp引用的相同列表,因此附加到 temp 也附加到 minilist。 同時temp = temp + [i]使temp成為對新 object 的新引用,而 minilist 保留對原始列表的引用。

您可以看到這就是原因,例如,在 LINE13 版本中將其轉換為+= [i] ,這使得temp保持它的引用,因此它會改變兩個列表。 在 LINE14 版本中,您可以在 append 之前添加temp = temp.copy()以使其成為新的 object。

通過連接元素添加列表時使用+運算符。 append 方法,append 右側的項目,你給它,而不是采取它的元素,如果你想有一個類似於 + 運算符的結果嘗試使用 extend()

不同之處在於,“+”操作專門在您通過連接元素添加數組時起作用。 “附加”方法將 object 附加到您給它的右側,而不是獲取元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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