繁体   English   中英

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

[英]Python - Finding index of first non-empty item in a list

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

例如,与

list_ = [None,[],None,[1,2],'StackOverflow',[]]

正确的非空索引应该是:

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

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

>>> next((i for i, j in enumerate(lst) if j == 2), 42)
42

PS不使用list作为变量名,它内置阴影。

一种相对优雅的方式是:

map(bool, a).index(True)

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

try:
    i = next(i for i,v in enumerate(list_) if v)
except StopIteration:
    # Handle...
next(i for (i, x) in enumerate(L) if x)

对于 python 3.x @Joe Kington 解决方案是

list(map(bool, list_)).index(True)

还要考虑使用值而不是索引

for value in filter(bool, list_):
    ...
next(i for i, v in enumerate(list) if v)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM