在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作变量名,它内置阴影.
一种相对优雅的方式是:
map(bool, a).index(True)
Run Code Online (Sandbox Code Playgroud)
(其中"a"是你的列表......我避免使用变量名"list"来避免覆盖原生"list"函数)