初学者python列表理解,查找索引

时间:2012-12-11 18:25:03

标签: python list indexing

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

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

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

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

谢谢

2 个答案:

答案 0 :(得分:6)

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

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

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

  1. Python列表方法索引返回干草中第一次出现针的位置。因此,在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
    
  4. 最后,为什么要担心在枚举时使用索引。

    >>> 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