如何计算列表中的整数范围
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 在评论中说他们不想要太多行代码......您可以简单地写一个 function
或 lambda
来获得这样的频率,将更容易扩展:
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
我正在尝试查找 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 在评论中说他们不想要太多行代码......您可以简单地写一个 function
或 lambda
来获得这样的频率,将更容易扩展:
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