我有一個列表,並需要創建一個條件滿足的次數的計數。難道是更Python做到這一點:最Pythonic條件計數器
cnt = sum([1 for s in a_list if some_condition])
,或者這是更Python:
cnt = 0
for s in a_list:
if (some_condition):
cnt += 1
我有一個列表,並需要創建一個條件滿足的次數的計數。難道是更Python做到這一點:最Pythonic條件計數器
cnt = sum([1 for s in a_list if some_condition])
,或者這是更Python:
cnt = 0
for s in a_list:
if (some_condition):
cnt += 1
使用事實上,用作整數True
是1
:
cnt = sum(some_condition(s) for s in a_list)
都不是。
使用第一個,但沒有在內存中創建一個不必要的名單:
cnt = sum(1 for s in a_list if some_condition)
非常涼;我不知道這種類型的列表理解功能,而沒有實際創建列表。這個叫什麼? –
@ Dr.Drew生成器表達式:https://www.python.org/dev/peps/pep-0289/ – DeepSpace
非常好的答案! – Konstantin
您可以更簡單地做到這一點:
cnt = sum(map(condition_func, a_list))
即假定condition_func是某種功能開啓列表中的項目變爲True或False。
如果'some_condition'還不是您需要調用的函數,則會增加很多開銷。 – chepner
無開銷,'some_condition'可以是任何表達式,例如's> 4',所以它可以比DeepSpace的答案更快。 – Daniel