首页 > 解决方案 > “+”与在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 函数会改变原始列表。

我的问题是为什么它在我的代码中很重要,因为临时列表仅在接下来的几行中使用。为什么他们给出不同的输出。

标签: pythonpython-3.xlistappenddynamic-programming

解决方案


append(i)问题不在于and之间的区别,而+ [i]在于对象在 python 中的工作方式。你差一点就搞定了。

首先,minilist = temp使得minilist引用相同的列表对象temp引用,所以附加到 temp 也附加到 minilist。同时对新对象temp = temp + [i]进行temp新引用,而 minilist 保留对原始列表的引用。

您可以看到这就是原因,例如,在 LINE13 版本中将其转换为+= [i],这使得temp它保持引用,因此它会改变两个列表。在 LINE14 版本中,您可以temp = temp.copy()在追加之前添加以使其成为新对象。


推荐阅读