Python 获取真值的长度
计算长度可以得到元素的计数:Python 获取真值的长度,python,python-3.x,Python,Python 3.x,计算长度可以得到元素的计数: >>> len([False, True, True, False, False]) 5 但是,我想得到True元素的数量。最好的方法是什么?目前我正在做: >>> len([item for item in items if item is True]) 2 也许有一个内置的,比如: len(items, val=False) 您可以简单地求和()列表False为0,True为1。 另一种方法是list.count() p
>>> len([False, True, True, False, False])
5
但是,我想得到True
元素的数量。最好的方法是什么?目前我正在做:
>>> len([item for item in items if item is True])
2
也许有一个内置的,比如:
len(items, val=False)
您可以简单地求和()列表False
为0,True
为1。
另一种方法是list.count()
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的列表comp([x表示数据中的x,如果x])
也比总和快
这两种方法已包含在其他问题中:
您可以简单地求和()列表False
为0,True
为1。
另一种方法是list.count()
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的列表comp([x表示数据中的x,如果x])
也比总和快
这两种方法已包含在其他问题中:
在列表上调用sum()
,而不调用列表comprehension@user2357112-拿着那个:-好多了dupe@user2357112我认为我错了,但我不同意被骗的说法。这只是计算布尔数。@PatrickArtner:sum
速度较慢且不太清晰,因此我认为count
更好。@user2357112也许您可以添加一个答案,表明在基准测试中计数更快,比较两者?调用sum()
在没有列表的列表中comprehension@user2357112-拿着那个:-好多了dupe@user2357112我认为我错了,但我不同意被骗的说法。这只是计算布尔数。@PatrickArtner:sum
速度较慢且不太清晰,因此我认为count
更好。@user2357112也许您可以添加一个答案,表明在基准测试中计数更快,将两者进行比较?第二个链接似乎影响了很多人:)@Patrick——很好的答案。谢谢。第二个链接似乎影响了很多人:)@Patrick——回答得很好。非常感谢。