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