【问题标题】:Iterating over arrays in Python 3在 Python 3 中迭代数组
【发布时间】:2019-01-25 21:59:53
【问题描述】:

我已经有一段时间没有编码并试图重新使用 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)

但显然我并没有正确地遍历数组,我认为这是我需要正确学习以用于其他目的的东西。谢谢!

【问题讨论】:

  • i 是您在数组中循环的项目的值...所以如果您有 3 个项目 [10, 11, 12] 您正在尝试访问 ar[10] 的第一次迭代这不起作用...您可以只使用内置的sum,例如:sum(ar)
  • @JonClements 您会注意到我在原始问题中提到 sum(ar) 是一种更简单的方法。我在问如何正确迭代数组元素。
  • (抱歉-不知何故瞥了一眼)您可以将循环更改为theSum += ar...
  • 如果要使用每个元素的INDEX,而不是列表中每个元素的值,可以使用enumerate

标签: python arrays python-3.x sum


【解决方案1】:

当您像以前一样在数组中循环时,您的 for 变量(在此示例中为 i)是您数组的当前元素。

例如,如果您的ar[1,5,10],则每次迭代中的i 值是1510。 因为你的数组长度是 3,所以你可以使用的最大索引是 2。所以当i = 5 你得到IndexError。 你应该把你的代码改成这样:

for i in ar:
    theSum = theSum + i

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

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

【讨论】:

    【解决方案2】:

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

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

    如果您打算使用索引,请尝试使用for index, value in enumerate(ar):,然后theSum = theSum + ar[index] 应该可以正常工作。

    【讨论】:

      【解决方案3】:

      你可以使用

          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
      

      【讨论】:

        【解决方案4】:

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

        ar = [10, 11, 12]
        for i in ar:
            theSum = theSum + ar[i]
        

        您实际上是在i 变量中按顺序获取列表或数组的值。 如果您在for loop 中打印变量i。您将得到以下输出:

        10
        11
        12
        

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-02
          • 1970-01-01
          • 1970-01-01
          • 2020-03-29
          • 1970-01-01
          • 1970-01-01
          • 2014-04-04
          • 2018-09-26
          相关资源
          最近更新 更多