Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
神秘的索引器-非常基本的问题(Python)_Python_Python 2.7_For Loop_Numpy - Fatal编程技术网

神秘的索引器-非常基本的问题(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和3
x[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个元素。我把答案扩大了一点,使它更清楚。