我遇到了一些代码问题,我觉得我必须遗漏一些基本的东西。给出与我相同的错误的简单示例如下:
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
这让我困惑太久了,但我似乎无法看到这里的问题是什么?有人可以帮忙吗?
答案 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
作为索引。
您使用i
对x
进行迭代,因此i
的值为1
,2
和3
。但3
对于长度为3的数组来说是一个太大的索引。最后一个索引是2
,因为Python索引从0开始。