我有以下代码,我想要所有1的索引位置:
mylist = ['0', '0', '1', '1', '0']
for item in mylist:
if item is '1':
print mylist.index(item)
有人可以解释为什么这个程序的输出是2,2而不是2,3?
谢谢
答案 0 :(得分:6)
python builtin enumerate返回索引和元素的元组。您只需迭代枚举元组并仅过滤那些与搜索条件匹配的元素
>>> mylist = ['0', '0', '1', '1', '0']
>>> [i for i,e in enumerate(mylist) if e == '1']
[2, 3]
现在回到你的代码。您需要了解三个问题
if
块您对is
的使用不正确。 is
不检查是否相等,只是验证两个元素是否具有相同的引用。虽然在这种情况下它会起作用,但最好避免。
>>> index = 0
>>> for item in mylist:
if item == '1':
index = mylist.index(item, index + 1)
print index
2
3
最后,为什么要担心在枚举时使用索引。
>>> for index, item in enumerate(mylist):
if item == '1':
print index
2
3
答案 1 :(得分:3)
这是因为mylist.index(item)
是一个查找第一次item
出现在数组中的索引的函数;那就是你可以调用mylist.index('1')
并立即得到索引2,甚至没有把它放在一个循环中。
你想做类似的事情,其中enumerate在循环中启动一个从零开始的索引:
mylist = ['0', '0', '1', '1', '0']
for i,item in enumerate(mylist):
if item == '1':
print i