神秘的IndexError - 非常基本的问题(Python)

时间:2013-11-19 13:09:39

标签: python python-2.7 for-loop numpy

我遇到了一些代码问题,我觉得我必须遗漏一些基本的东西。给出与我相同的错误的简单示例如下:

from numpy import array,zeros
x = array([1,2,3])
f = zeros(len(x))

for i in x:
    f[i] = x[i] + 1

回溯内容如下:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
C:\WINDOWS\system32\<ipython-input-5-6b6b88f30156> in <module>()
      1 for i in x:
----> 2     f[i] = x[i] + 1
      3 

IndexError: index out of bounds

这让我困惑太久了,但我似乎无法看到这里的问题是什么?有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

在这个循环中:

for i in x:
    f[i] = x[i] + 1

i取值1,2和3。x[i]不是您认为的那样。 i已包含数组x的单元格的内容。由于数组的索引从0开始,因此在尝试获取索引3的元素(这将是第4个元素)时会执行IndexError

您可能需要以下内容:

for i in range(len(x)):
    f[i] = x[i] + 1

也可以这样写:

for i, v in enumerate(x):
    f[i] = v + 1

答案 1 :(得分:2)

执行for i in some_list时,i引用该列表的元素,而不是其索引。例如:

In [1]: for i in [3, 2, 1]:
   ...:     print i
   ...:     
3
2
1

但是,您可以使用i作为索引。

您使用ix进行迭代,因此i的值为123。但3对于长度为3的数组来说是一个太大的索引。最后一个索引是2,因为Python索引从0开始。