问题:为什么我从“for i in ar”中的“ar[i]”得到一个IndexError(或TypeError,或者只是错误的结果)?

我正在尝试使用for循环对列表的值求和。这是我的代码:

def sumAnArray(ar):
    theSum = 0
    for i in ar:
        theSum = theSum + ar[i]
    print(theSum)
    return theSum

我收到以下错误:

line 13, theSum = theSum + ar[i]
IndexError: list index out of range

我发现我正在尝试做的事情显然就像sum(ar)一样简单。但是我想明白:为什么会得到这个IndexError,应该怎么写for循环呢?循环实际上是如何工作的?


有关 Python 如何实现for循环和迭代器协议的技术概述,请参见例如带有可迭代的 Python for 循环如何工作?。

解答

当你像你一样在一个数组中循环时,你的 for 变量(在这个例子中是i)是你数组的当前元素。

比如你的ar[1,5,10],那么每次迭代的i值就是1510。而且因为你的数组长度是3,你可以使用的最大索引是2。所以当i = 5你得到IndexError。您应该将代码更改为以下内容:

for i in ar:
    theSum = theSum + i

或者如果你想使用索引,你应该创建一个从 0 roarray length - 1开始的范围。

for i in range(len(ar)):
    theSum = theSum + ar[i]
Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐