如何计算列表中的整数范围

how to count for a range of integers in a list

我正在尝试查找 list.I 中数字的概率有一个列表说:

a =[62.0, 0.0, 67.0, 69.0, 0.0, 76.0, 0.0, 0.0, 69.0, 70.0, 73.0, 0.0, 0.0, 56.0, 80.0, 0.0, 59.0, 65.0, 78.0, 0.0, 43.0, 0.0, 87.0]

我想找出0-25,25-50,50-100和大于100的数字的概率。 我试过用这个:

a.count(range(25))/len(a)
a.count(range(25,50))/len(a)

但我没有得到所需的结果。 有人可以帮忙解决这里的问题吗?

a.count(range(25)) 给出 0,因为 range(25) 不是 a 的元素。您要计算的是 range(25) 的每个单独元素在 a 中的出现次数,例如:

>>> sum(a.count(i) for i in range(25))
9

或者,您可以遍历 a 的每个元素并检查它是否包含在范围内(我认为这会快一点,因为理论上您不需要遍历一个范围测试里面是否有东西):

>>> sum(i in range(25) for i in a)
9
>>> len(list(filter(lambda x: x<=25, a)))/len(a)
0.391304347826087
a = [62.0, 0.0, 67.0, 69.0, 0.0, 76.0, 0.0, 0.0, 69.0, 70.0, 73.0, 0.0, 0.0, 56.0, 80.0, 0.0, 59.0, 65.0, 78.0, 0.0, 43.0, 0.0, 87.0]

print("0-25:", len(list(filter(lambda x: 0 <= x <= 25, a))) / len(a))
print("25-50:", len(list(filter(lambda x: 25 < x <= 50, a))) / len(a))
print("50-100:", len(list(filter(lambda x: 50 < x <= 100, a))) / len(a))
print(">100:", len(list(filter(lambda x: x > 100, a))) / len(a))

输出

0-25: 0.391304347826087
25-50: 0.043478260869565216
50-100: 0.5652173913043478
>100: 0.0

添加到@Samwise 的答案中,因为 OP @Kshtj 在评论中说他们不想要太多行代码......您可以简单地写一个 functionlambda 来获得这样的频率,将更容易扩展:

get_freq = lambda a, low, high: sum(low <= i < high for i in a) / len(a)

>>>get_freq(a, 0, 25)
0.391304347826087
>>>get_freq(a, 50, 100)
0.5652173913043478