Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取真值的长度_Python_Python 3.x - Fatal编程技术网

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——回答得很好。非常感谢。