Python 按项目获取前几项订单';s计数

Python 按项目获取前几项订单';s计数,python,arrays,list,numpy,Python,Arrays,List,Numpy,我想通过计数得到前4个数字。并以列表类型返回。结果将是[2,3,8,7]或[2,3,8,9] 我尝试在Python中使用数组函数。但是发现它没有效率。所以我找到了numpy。但我不熟悉numpy。有人能通过numpy得到结果吗?或者还有其他更有效的方法吗?在此处使用: Counter.most_common()方法按排序顺序提供条目;在这里,我们询问了4个最常见的条目 如果您想只列出4个数字,请使用: from collections import Counter counts = Count

我想通过计数得到前4个数字。并以列表类型返回。结果将是
[2,3,8,7]
[2,3,8,9]

我尝试在Python中使用数组函数。但是发现它没有效率。所以我找到了numpy。但我不熟悉numpy。有人能通过numpy得到结果吗?或者还有其他更有效的方法吗?

在此处使用:

Counter.most_common()
方法按排序顺序提供条目;在这里,我们询问了4个最常见的条目

如果您想只列出4个数字,请使用:

from collections import Counter

counts = Counter(a1)
for lst in (a2, a3, a4):
    counts.update(lst)

for number, count in counts.most_common(4):
    print number, count
您也可以连接输入列表,但最好使用
itertools.chain

top4 = [n for n, c in counts.most_common(4)]
而不是创建一个完整的列表对象,只会再次丢弃

演示:

在此处使用:

Counter.most_common()
方法按排序顺序提供条目;在这里,我们询问了4个最常见的条目

如果您想只列出4个数字,请使用:

from collections import Counter

counts = Counter(a1)
for lst in (a2, a3, a4):
    counts.update(lst)

for number, count in counts.most_common(4):
    print number, count
您也可以连接输入列表,但最好使用
itertools.chain

top4 = [n for n, c in counts.most_common(4)]
而不是创建一个完整的列表对象,只会再次丢弃

演示:


numpy选项仅在非常大的阵列中更快:

>>> from collections import Counter
>>> a1 = [1,2,2,2,3,4,]
>>> a2 = [3,5,6,7,8,8,]
>>> a3 = [3,4,7,8,9,9,]
>>> a4 = [2,3,5,7,8,9,]
>>> counts = Counter(a1)
>>> for lst in (a2, a3, a4):
...     counts.update(lst)
... 
>>> for number, count in counts.most_common(4):
...     print number, count
... 
2 4
3 4
8 4
7 3
>>> [n for n, c in counts.most_common(4)]
[2, 3, 8, 7]
如果必须有列表,可以使用
tolist()
选项:

complete = np.concatenate((a1,a2,a3,a4))
uvals, uind = np.unique(complete, return_inverse=True)
uvals[np.bincount(uind).argsort()[-4:]][::-1]

array([8, 3, 2, 9])

numpy选项仅在非常大的阵列中更快:

>>> from collections import Counter
>>> a1 = [1,2,2,2,3,4,]
>>> a2 = [3,5,6,7,8,8,]
>>> a3 = [3,4,7,8,9,9,]
>>> a4 = [2,3,5,7,8,9,]
>>> counts = Counter(a1)
>>> for lst in (a2, a3, a4):
...     counts.update(lst)
... 
>>> for number, count in counts.most_common(4):
...     print number, count
... 
2 4
3 4
8 4
7 3
>>> [n for n, c in counts.most_common(4)]
[2, 3, 8, 7]
如果必须有列表,可以使用
tolist()
选项:

complete = np.concatenate((a1,a2,a3,a4))
uvals, uind = np.unique(complete, return_inverse=True)
uvals[np.bincount(uind).argsort()[-4:]][::-1]

array([8, 3, 2, 9])

为什么我觉得这个问题在过去几天里至少被问了半打次,每次都有相同的答案!使用
计数器
类:)对不起,您只能将一个答案标记为已接受。不过,很高兴你发现两者都很有帮助!为什么我觉得这个问题在过去几天里至少被问了半打次,每次都有相同的答案!使用
计数器
类:)对不起,您只能将一个答案标记为已接受。不过,很高兴你发现两者都很有帮助!