在Python3中迭代数组

在Python3中迭代数组,python,arrays,python-3.x,sum,Python,Arrays,Python 3.x,Sum,我已经有一段时间没有编写代码了,也没有尝试回到Python。我正试图编写一个简单的程序,通过将每个数组元素的值相加到一个和来对数组求和。这就是我所拥有的: def sumAnArray(ar): theSum = 0 for i in ar: theSum = theSum + ar[i] print(theSum) return theSum 我得到以下错误: line 13, theSum = theSum + ar[i] IndexErro

我已经有一段时间没有编写代码了,也没有尝试回到Python。我正试图编写一个简单的程序,通过将每个数组元素的值相加到一个和来对数组求和。这就是我所拥有的:

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)

但很明显,我并没有正确地遍历数组,我想这是我需要为其他目的正确学习的东西。谢谢

当您像这样在数组中循环时,for变量(在本例中为
i
)是数组的当前元素

例如,如果您的
ar
[1,5,10]
,则每次迭代中的
i
值为
1
5
10
。 因为数组长度是3,所以可以使用的最大索引是2。因此,当
i=5
时,您将得到
索引器。
您应该将代码更改为以下内容:

for i in ar:
    theSum = theSum + i
或者,如果要使用索引,则应创建一个范围,范围为0 ro
数组长度-1

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

for循环迭代数组的元素,而不是其索引。 假设您有一个列表ar=[2,4,6]:

当您在ar:
中对i使用
进行迭代时,i的值将是2、4和6。因此,当您尝试访问第一个值的
ar[i]
时,它可能会起作用(因为列表的最后一个位置是2,a[2]等于6),但对于后一个值则不起作用,因为a[4]不存在

如果您打算使用索引,请尝试使用
作为索引,枚举(ar)中的值:
,然后
theSum=theSum+ar[index]
应该可以正常工作。

您可以使用

    nditer
在此,我计算了逻辑回归中正系数和负系数的数量:

b=sentiment_model.coef_
pos_coef=0
neg_coef=0
for i in np.nditer(b):
    if i>0:
    pos_coef=pos_coef+1
    else:
    neg_coef=neg_coef+1
print("no. of positive coefficients is : {}".format(pos_coef))
print("no. of negative coefficients is : {}".format(neg_coef))
输出:

no. of positive coefficients is : 85035
no. of negative coefficients is : 36199

使用此方法迭代列表或数组时:

ar = [10, 11, 12]
for i in ar:
    theSum = theSum + ar[i]
实际上,您是在
i
变量中按顺序获取列表或数组的值。 如果在for循环的
中打印变量
i
。您将获得以下输出:

10
11
12
然而,在代码中,您将
i
变量与数组的索引值混淆。因此,在第一次迭代中执行
ar[i]
意味着
ar[10]
。这当然是索引超出范围抛出
indexer

编辑
为了更好地理解Python中迭代数组或列表的不同方法,您可以阅读

i
是您在数组中循环的项的值。。。因此,如果您有3个项目
[10,11,12]
,那么您正在尝试访问
ar[10]
的第一次迭代,但这不起作用。。。您可以使用内置的
sum
,例如:
sum(ar)
?@JonClements您会注意到我在原始问题中提到sum(ar)是一种更简单的方法。我想问的是如何正确地迭代数组元素。(对不起,不知怎么扫了这一点)您可以将循环更改为
theSum+=ar
…如果您想使用每个元素的索引,而不是列表中每个元素的值,您可以使用