Python - 查找列表中第一个非空项的索引

Jon*_*han 8 python list

在Python中找到列表中第一个非空项的索引的最有效\优雅方法是什么?

例如,用

list_ = [None,[],None,[1,2],'StackOverflow',[]]
Run Code Online (Sandbox Code Playgroud)

正确的非空索引应该是:

3
Run Code Online (Sandbox Code Playgroud)

Sil*_*ost 16

>>> lst = [None,[],None,[1,2],'StackOverflow',[]]
>>> next(i for i, j in enumerate(lst) if j)
3
Run Code Online (Sandbox Code Playgroud)

如果您不想引发StopIteration错误,只需为该next函数提供默认值:

>>> next((i for i, j in enumerate(lst) if j == 2), 42)
42
Run Code Online (Sandbox Code Playgroud)

PS不用list作变量名,它内置阴影.


Joe*_*ton 6

一种相对优雅的方式是:

map(bool, a).index(True)
Run Code Online (Sandbox Code Playgroud)

(其中"a"是你的列表......我避免使用变量名"list"来避免覆盖原生"list"函数)

  • 只能在python-2.x中使用,并且无论如何它都会构建整个布尔值列表。 (2认同)