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

问题描述:

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

例如,

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

正确的非空指标应该是:

3 

>>> lst = [None,[],None,[1,2],'*',[]] 
>>> 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 

P.S.不要使用list作为变量名,它会内置阴影。这样做的

+0

为了简洁和正确,一票赞成和一个掌声。 – 2010-07-12 15:22:27

+1

你是对的!从列表更改为list_(符合PEP8) – Jonathan 2010-07-12 15:23:03

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) 

一个相对优雅的方式是:

map(bool, a).index(True) 

(其中“a”是你的列表...我回避的变量名称“列表”,以免覆盖原生的“列表”功能)

+1

只能在python-2.x中使用,并且无论如何它都会生成布尔值的整个列表。 – SilentGhost 2010-07-12 15:24:26

+0

@SilentGhost - 真。我没有意识到python3中的地图已经改变。 – 2010-07-12 15:31:39

next(i for i, v in enumerate(list) if v)