在Python中,如何找到列表中第一项不是某些值的索引?

Rya*_*nch 16 python indexing methods list

Python的列表类型有一个索引(x)方法.它接受单个参数x,并返回列表中具有值x的第一个项的(整数)索引.

基本上,我需要反转索引(x)方法.我需要获得一个没有值x的列表中第一个值的索引.我甚至可能只使用一个函数来返回第一个项的索引值!=无.

我可以想到一个带有递增计数器变量的'for'循环实现,但我觉得我错过了一些东西.是否存在可以处理此问题的现有方法或单行Python构造?

在我的程序中,当我处理从复杂的正则表达式匹配返回的列表时,情况出现了.每个列表中除一个项目外的所有项目都具有值None.如果我只需要匹配的字符串,我可以使用列表理解,如'[x for [my_list]中的x,如果x不是None]',但是我需要索引才能找出我的正则表达式中的哪个捕获组实际导致的比赛.

Ale*_*lli 17

退出第一场比赛非常简单:不是计算完整的列表理解(然后抛弃除第一项之外的所有内容),next而是使用genexp.假设你想要的是-1当没有物品满足存在的条件时!= x,

return next((i for i, v in enumerate(L) if v != x), -1)
Run Code Online (Sandbox Code Playgroud)

这是Python 2.6语法; 如果你遇到2.5或更早,.next()是genexp(或其他迭代器)的方法,并且不接受上面的默认值-1(所以如果你不想看到StopIteration异常,你将不得不使用a try/ except).但是,还有有原因的更多版本中后2.5制作-持续改进的语言和它的内置插件的- - !)


Ste*_*hen 5

当你只需要第一个时使用列表理解只是感觉黏糊糊(对我而言).使用for循环并提前退出.

>>> lst = [None, None, None, "foo", None]
>>> for i, item in enumerate(lst):
...   if item: break
... else:
...   print "not found"
... 
>>> i
3
Run Code Online (Sandbox Code Playgroud)