我有一个数字列表,我想得到一个数字在满足一定条件的列表中出现的次数。我可以使用列表解析(或函数中的列表解析),但我想知道是否有人有更短的方法。
# list of numbers
j=[4,5,6,7,1,3,7,5]
#list comprehension of values of j > 5
x = [i for i in j if i>5]
#value of x
len(x)
#or function version
def length_of_list(list_of_numbers, number):
x = [i for i in list_of_numbers if j > number]
return len(x)
length_of_list(j, 5)
有没有更精简的版本?
9条答案
按热度按时间fhity93d1#
你可以这样做:
用这种方法将
True
添加到True
中,一开始可能看起来很奇怪,但我不认为这是非Python的;毕竟,int
的bool
is a subclass在2.3之后的所有版本中:7fyelxc52#
可以创建一个较小的中间结果,如下所示:
m2xkgtsf3#
如果你使用numpy,你可以保存一些笔画,但是我不认为它比senderle的答案更快/更紧凑。
x6492ojm4#
(有点)不同的方式:
reduce(lambda acc, x: acc + (1 if x > 5 else 0), j, 0)
hi3rlvi25#
如果你使用NumPy(正如ludaavic的回答),对于大型数组,你可能希望使用NumPy的
sum
函数,而不是Python内置的sum
函数,以获得显著的加速效果--例如,在我的笔记本电脑上,对于1000万个元素的数组,加速效果超过1000倍:(上面使用IPython的
%timeit
“magic”进行计时)0g0grzrc6#
使用对分模块计数的不同方式:
tv6aics17#
我会添加一个Map和过滤器版本,因为为什么不呢?
tkqqtvp18#
你可以这样做使用函数:
xiozqbni9#
这是有点长,但详细的解决方案,为初学者: