有人可以告诉我为什么下面的两个代码给我不同的结果吗?我的印象是枚举和range(len(list))都是可迭代的。
代码:试图找到数组的平衡指数
def equisum (arr):
tsum = sum(arr)
lsum = 0
num = len(arr)
for i in range(num):
tsum -= num
if lsum == tsum:
return i
lsum += num
return -1
arr = [-7, 1, 5, 2, -4, 3, 0]
print (equisum (arr))
Result : -1
def equisum (arr):
tsum = sum(arr)
lsum = 0
for i, num in enumerate(arr):
tsum -= num
if lsum == tsum:
return i
lsum += num
return -1
arr = [-7, 1, 5, 2, -4, 3, 0]
print (equisum (arr))
Result : 3 (the correct answer)
答案 0 :(得分:0)
range(num)
将给出值0, 1, 2...
。
enumerate(arr)
将给出值(0, -7), (1, 1), (2, 5)...
,其中第一个值是索引,第二个值是该索引处的arr
值。
您的第二个函数应该给出正确的答案,因为它减去了arr[i]
的值,而不仅仅是i
。
答案 1 :(得分:0)
range()
用于获取数字序列。例如,如果您输入range(10)
,它将给出从0到9的数字。
在这里,当您使用range
时,您计算的数字有误,最后返回了默认值-1
。
在enumerate()
中,它同时从列表中返回index和 actual 元素。
顺便说一句,如果您使用VS Code进行编程,请使用 debug 功能。这将有助于更快地识别此类问题。