[英]Is there a faster way I can count the number of occurrences of a number in a list?
我正在尝试编写一个函数来计算列表中某个数字的出现次数,并且顺序根据数字升序(从 0 到列表中的最大值),而不是出现次数。 这是我写的函数:
def sort_counts(sample):
result = []
for i in range(max(sample)+1):
result.append(sample.count(i))
return result
例如:
>>> sort_counts([1,2,2,3,3,4,1,1,1,1,2,5])
>>> [0, 5, 3, 2, 1, 1]
我了解到,如果列表中有更多数字, sample.count
会运行缓慢。 有没有更快/更简单的方法可以编写这个函数?
集合模块中的计数器是一种计算列表中项目出现次数的好方法
from collections import Counter
lst = [1,2,2,3,3,4,1,1,1,1,2,5]
# create a counter object
c = Counter(lst)
# get the counts
[c[i] for i in range(max(c)+1)]
# [0, 5, 3, 2, 1, 1]
如果您不想使用计数器,则可以在事先创建适当大小的结果数组后简单地迭代列表中的值:
sample = [1,2,2,3,3,4,1,1,1,1,2,5]
result = [0] * (max(sample)+1)
for v in sample:
result[v] += 1
输出:
[0, 5, 3, 2, 1, 1]
对于您的样本数据,速度明智,如果Counter
解决方案是1x
时间,这大约是4x
而您现有的解决方案大约是8x
。 随着列表变长, Counter
的速度优势降低,相对性能更像1x
、 2x
和4x
。
如果您不想使用 count 遍历样本的元素并更新结果。 它可以减少查找元素计数所需的多次遍历所需的时间。
def sort_counts(sample):
result = [0]*(max(sample)+1)
for s in samples:
result[s]+=1
return result
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.