我尝试在同一个循环中捕获多个索引器,但只能捕获第一个索引器。This问题可能与我的问题有关,但我无法理解。如果有帮助的话,我将在Windows10和Python2.7.13上使用Enthough Canopy 1.6.2。你知道吗
import numpy as np
some_array=np.zeros(10)
some_set=[2,4,15,19]
for sense in some_set:
try:
some_array[sense]=1
except IndexError:
some_set.remove(sense)
print some_set, "sense"
我收到的输出是:
[2, 4, 19] sense
而我想要一个表单的输出
[2, 4, 19] sense
[2, 4] sense
您的问题源于您正在修改正在循环的数组。在python中,
for x in y:
与for i in range(len(y)): x = y[i]
基本相同。你知道吗问题是,您在循环的索引2中,这将产生元素
15
。然后捕获错误并从数组中删除15
。一切都很好。但是,现在循环的数组是[2, 4, 19]
,您刚刚结束了一次迭代,让Python知道索引3处的元素是什么。不再有索引3,因此Python将终止循环。你知道吗要阻止问题的发生,只需使用
.copy()
或[:]
在数组的副本上循环,这样就不会更改正在检查的数组。你知道吗整个循环没有停止。你知道吗
试着在你的集合末尾加上一个像21这样的数字,我想你会看到发生了什么。你知道吗
Python读取循环的索引0,然后是1,然后是2,以此类推,所以它读取2(索引0),然后是4(索引1),然后是15(索引2),然后删除它。但是列表是[2,4,19,21],它读取索引3。你知道吗
正如bereal提到的,在迭代集合时应该避免修改集合。你知道吗
相关问题 更多 >
编程相关推荐