屋盗Python语法

2024-10-02 20:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是,为什么下面的语法会产生房屋抢劫犯的正确答案:

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:keepin数组,答案是3:keepin。你知道吗

很明显,我遗漏了python的内联功能。有人能提供一些见解吗?谢谢您。你知道吗


Tags: 答案代码inforreturn错误语法element
3条回答

两段代码之间的区别在于,在第一个示例中,您有一个赋值,而在第二个示例中,您有两个连续的赋值。你知道吗

last, now = now, max(last + element, now)行是一个赋值语句。右侧构建一个由两个元素组成的tuple,然后在一个步骤中分配给操作符左侧两个左值的元组(即两个变量)。你知道吗

然而,行last = nownow = max(last + element, now)是彼此连续进行的,即第一个赋值首先发生,然后是第二个赋值(受第一个赋值的影响)。你知道吗

最小示例:

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

在第一段代码中,您可以同时更改变量lastnow,使用=的右侧的旧值:

    last, now = now, max(last + element, now)

在第二个代码段中,首先更改last,然后更改now,从而使用更改的last

    last = now
    now = max(last + element, now)

在第一个代码中,这两个值都是从先前的值lastnow更新而来的。你知道吗

在第二段代码中,首先更新last,然后用新值继续计算(以前是now)。你知道吗

相关问题 更多 >