我有一个列表,并需要创建一个条件满足的次数的计数。难道是更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