我有以下代码,我想要所有 1 的索引位置:
mylist = ['0', '0', '1', '1', '0']
for item in mylist:
if item is '1':
print mylist.index(item)
有人可以解释为什么这个程序的输出是 2, 2 而不是 2, 3 吗?
谢谢
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
这是因为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