神秘的索引器-非常基本的问题(Python)
我在一些代码方面遇到了问题,我觉得我一定是缺少了一些基本的东西。一个简单的例子给出了与我相同的错误,如下所示:神秘的索引器-非常基本的问题(Python),python,python-2.7,for-loop,numpy,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
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
回溯内容如下:
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
---------------------------------------------------------------------------
索引器回溯(最后一次最近调用)
C:\WINDOWS\system32\in()
1对于x中的i:
---->2f[i]=x[i]+1
3.
索引器:索引超出范围
这让我困惑太久了,但我似乎看不出这里有什么问题?有人能帮忙吗?当您在某些列表中执行“代码>为我”时,
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开头。在此循环中:
for i in x:
f[i] = x[i] + 1
i
取值1、2和3x[i]
不是你想象的那样i
已包含数组x
的单元格内容。由于数组的索引从0开始,因此在尝试获取索引3的元素(即第4个元素)时,需要执行索引器
你可能想要一些东西,比如:
for i in range(len(x)):
f[i] = x[i] + 1
这也可以写成:
for i, v in enumerate(x):
f[i] = v + 1
我很高兴你没有在array[(1,2,3)]
上出错,或者导入时没有zero
。-您是在复制/粘贴代码,还是在键入代码?键入代码,在控制台中操作正确,对此表示抱歉!我想我明白了,所以即使Python索引从0
开始,for
循环从I=1开始?在这种情况下,向f
添加一个额外的元素应该可以解决我的问题,但这似乎不是一个特别优雅的解决方案?@user3008862它以i=1
开始,因为1
是数组的第0个元素。我把答案扩大了一点,使它更清楚。