【问题标题】:Beginner python list complehension, look up index初学者python列表理解,查找索引
【发布时间】:2023-03-05 21:18:01
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 并且不要使用'is'进行字符串比较

标签: python list indexing


【解决方案1】:

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
    

最后为什么要在枚举时担心使用索引。

>>> for index, item in enumerate(mylist):
    if item == '1':
        print index


2
3

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2020-02-07
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多