-1

我有以下代码,我想要所有 1 的索引位置:

mylist = ['0', '0', '1', '1', '0']

for item in mylist:
    if item is '1':
        print mylist.index(item)

有人可以解释为什么这个程序的输出是 2, 2 而不是 2, 3 吗?

谢谢

4

2 回答 2

6

python builtin enumerate返回索引和元素的元组。您只需要遍历枚举元组并仅过滤那些与搜索条件匹配的元素

>>> mylist = ['0', '0', '1', '1', '0']
>>> [i for i,e in enumerate(mylist) if e == '1']
[2, 3]

现在回到你的代码。你需要了解三个问题

  1. Python list 方法 index 返回干草中第一次出现针的位置。因此在 mylist 中搜索 '1' 将始终返回 2。您需要缓存以前的索引并使用它进行后续搜索
  2. 您的缩进不正确,您的打印应该在if块内
  3. 您的使用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
于 2012-12-11T18:26:09.447 回答
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
于 2012-12-11T18:27:14.207 回答