我正在尝试将list
中的最后一个值加1。 list[-1]
应该给我最后的价值。下面的代码:
def plusOne( l):
for idx, item in enumerate(l):
l[-1]=l[-1]+1
return l
print(plusOne(v))
问题:运行代码后,我期待v=[4,3,2,5]
时得到答案v=[4,3,2,2]
。当我使用[1,2,3]
进行测试时,此方法有效。当我在l[-1]
行上设置断点时,我看到:
idx 0 item 4
idx 1 item 3
idx 1 item 3
idx 2 item 2
idx 3 item 4
有人可以解释一下为什么它适用于[1,2,3]
而不适用于[4,3,2,1]
吗?
答案 0 :(得分:1)
[1, 2, 3]
对我不起作用;它返回[1, 2, 6]
。
您这里不需要任何循环。多次加1的原因是因为您将递增最后一个元素的代码放入了循环中。因此,当列表中有4个元素时,最后一个元素将增加4倍。
请改用此方法(您也可以使用... += 1
代替... = ... + 1
):
def plusOne(l):
l[-1] += 1
return l
请注意,这将修改原始列表。基本上,执行此功能将修改传递给它的列表(在您的情况下为v
)。复制:
def plusOne(l):
l = l[:]
l[-1] += 1
return l
答案 1 :(得分:1)
您可以这样做:
def plusOne(l):
l[-1] += 1
return l
您的元素不起作用的原因是因为您实际上要遍历每个元素,并且对于每个元素,最后一个元素都增加一个。因此,如果有3个元素,则最后一个元素将增加3。