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
作为变量名,它会内置阴影。这样做的
答
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)
为了简洁和正确,一票赞成和一个掌声。 – 2010-07-12 15:22:27
你是对的!从列表更改为list_(符合PEP8) – Jonathan 2010-07-12 15:23:03