python中的enumerate和range(len(list))有什么区别?

时间:2020-06-24 06:22:05

标签: arrays python-3.x list range

有人可以告诉我为什么下面的两个代码给我不同的结果吗?我的印象是枚举和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)

2 个答案:

答案 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 功能。这将有助于更快地识别此类问题。