获取真值的长度

2024-04-20 14:07:33 发布

您现在位置:Python中文网/ 问答频道 /正文

计算长度可以得到元素的计数:

>>> len([False, True, True, False, False])
5

但是,我想得到True元素的数量。最好的办法是什么?目前我正在做:

>>> len([item for item in items if item is True])
2

也许有一个内在的,比如:

len(items, val=False)

Tags: infalsetrue元素for数量lenif
1条回答
网友
1楼 · 发布于 2024-04-20 14:07:33

只需sum()列表False是0,True是1。 另一种方法是list.count()True

prep = """import random
random.seed("count is faster then sum he said...")
data = random.choices([True,False],k=10000)"""

prog1 = "k = sum(data)"
prog2 = "l = data.count(True)"
prog3 = "j = len( [x for x in data if x] )"

import timeit

print(timeit.timeit(prog1,setup=prep, number = 1000))
print(timeit.timeit(prog2,setup=prep, number = 1000))
print(timeit.timeit(prog3,setup=prep, number = 1000))

输出:

0.32247100600034173  # sum( data )
0.12246353499995166  # data.count( True )  
0.24579112000083114  # len( [x for x in data if x] )

计数似乎是正确的选择,它只需要大约45-50%的时间。即使是len( [x for x in data if x] )的list comp也比sum快

这两种方法已经包含在其他问题中:

相关问题 更多 >