Python中找到列表中第一個非空項目的索引的最有效\優雅方式是什麼?Python - 查找列表中第一個非空項目的索引
例如,
list_ = [None,[],None,[1,2],'StackOverflow',[]]
正確的非空指標應該是:
3
Python中找到列表中第一個非空項目的索引的最有效\優雅方式是什麼?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
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」是你的列表...我回避的變量名稱「列表」,以免覆蓋原生的「列表」功能)
只能在python-2.x中使用,並且無論如何它都會生成布爾值的整個列表。 – SilentGhost 2010-07-12 15:24:26
@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