首页 > 解决方案 > python中的枚举和范围(len(list))有什么区别?

问题描述

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

标签: arrayspython-3.xlistrange

解决方案


range()用于获取数字序列。例如,如果您给出range(10),它将给出从 0 到 9 的数字。

在这里,当您使用range时,您计算的数字错误,最后-1返回默认值。

在 中enumerate(),它从列表中返回索引和实际元素。

顺便说一句,如果您使用 VS Code 进行编程,请使用调试功能。这将有助于更快地识别此类问题。


推荐阅读