我的问题是为什么以下语法会为 house robber 生成正确答案:
last, now = 0, 0
for element in nums:
last, now = now, max(last + element, now)
return now
vs 相同的东西,但不是内联的:
last, now = 0, 0
for element in nums:
last = now
now = max(last + element, now)
return now
我希望它们应该相同。不过,我(在第二个片段中)查到了这一点,但它给了我错误的答案。例如:在数组 [3, 5, 3] 中,我对第二个代码片段给出的答案是 11 - 它会不断添加内容。
我显然遗漏了一些有关 python 内联功能的信息。有没有人可以提供一些见解?谢谢。
最佳答案
您的两段代码之间的区别在于,在第一个示例中您有一个 赋值,而在第二个示例中您有两个连续 赋值。
last, now = now, max(last + element, now)
行是一个赋值语句。右侧构建了一个包含两个元素的 tuple
,然后在一个步骤中将其分配给运算符左侧的两个lvalues(即两个变量)的元组。
然而,last = now
和 now = max(last + element, now)
行是连续完成的,即。 e.第一个分配首先发生,然后是第二个(受第一个影响)。
最小的例子:
a = 4
b = 3
a, b = b, a # → a will be 3, b will be 4
对比
a = 4
b = 3
a = b # → a will be 3
b = a # → b will be 3 as well
关于python - 房屋强盗 - Python 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079442/