python 列表中大于某个数字的值的数量

9o685dep  于 2023-02-21  发布在  Python
关注(0)|答案(9)|浏览(285)

我有一个数字列表,我想得到一个数字在满足一定条件的列表中出现的次数。我可以使用列表解析(或函数中的列表解析),但我想知道是否有人有更短的方法。

# 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)

有没有更精简的版本?

fhity93d

fhity93d1#

你可以这样做:

>>> j = [4, 5, 6, 7, 1, 3, 7, 5]
>>> sum(i > 5 for i in j)
3

用这种方法将True添加到True中,一开始可能看起来很奇怪,但我不认为这是非Python的;毕竟,intboolis a subclass在2.3之后的所有版本中:

>>> issubclass(bool, int)
True
7fyelxc5

7fyelxc52#

可以创建一个较小的中间结果,如下所示:

>>> j = [4, 5, 6, 7, 1, 3, 7, 5]
>>> len([1 for i in j if i > 5])
3
m2xkgtsf

m2xkgtsf3#

如果你使用numpy,你可以保存一些笔画,但是我不认为它比senderle的答案更快/更紧凑。

import numpy as np
j = np.array(j)
sum(j > i)
x6492ojm

x6492ojm4#

(有点)不同的方式:
reduce(lambda acc, x: acc + (1 if x > 5 else 0), j, 0)

hi3rlvi2

hi3rlvi25#

如果你使用NumPy(正如ludaavic的回答),对于大型数组,你可能希望使用NumPy的sum函数,而不是Python内置的sum函数,以获得显著的加速效果--例如,在我的笔记本电脑上,对于1000万个元素的数组,加速效果超过1000倍:

>>> import numpy as np
>>> ten_million = 10 * 1000 * 1000
>>> x, y = (np.random.randn(ten_million) for _ in range(2))
>>> %timeit sum(x > y)  # time Python builtin sum function
1 loops, best of 3: 24.3 s per loop
>>> %timeit (x > y).sum()  # wow, that was really slow! time NumPy sum method
10 loops, best of 3: 18.7 ms per loop
>>> %timeit np.sum(x > y)  # time NumPy sum function
10 loops, best of 3: 18.8 ms per loop

(上面使用IPython的%timeit“magic”进行计时)

0g0grzrc

0g0grzrc6#

使用对分模块计数的不同方式:

>>> from bisect import bisect
>>> j = [4, 5, 6, 7, 1, 3, 7, 5]
>>> j.sort()
>>> b = 5
>>> index = bisect(j,b) #Find that index value
>>> print len(j)-index
3
tv6aics1

tv6aics17#

我会添加一个Map和过滤器版本,因为为什么不呢?

sum(map(lambda x:x>5, j))
sum(1 for _ in filter(lambda x:x>5, j))
tkqqtvp1

tkqqtvp18#

你可以这样做使用函数:

l = [34,56,78,2,3,5,6,8,45,6]  
print ("The list : " + str(l))   
def count_greater30(l):  
    count = 0  
    for i in l:  
        if i > 30:  
            count = count + 1.  
    return count
print("Count greater than 30 is : " + str(count)).  
count_greater30(l)
xiozqbni

xiozqbni9#

这是有点长,但详细的解决方案,为初学者:

from functools import reduce 
from statistics import mean

two_dim_array = [[1, 5, 7, 3, 2], [2, 4 ,1 ,6, 8]]

# convert two dimensional array to one dimensional array 
one_dim_array = reduce(list.__add__, two_dim_array)

arithmetic_mean = mean(one_dim_array)

exceeding_count = sum(i > arithmetic_mean for i in one_dim_array)

相关问题