在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
当前回答
使用%timeit查看哪个操作更有效。np.array计数操作应该更快。
from collections import Counter
mylist = [1,7,7,7,3,9,9,9,7,9,10,0]
types_counts=Counter(mylist)
print(types_counts)
其他回答
如果只需要单个项目的计数,请使用计数方法:
>>> [1, 2, 3, 4, 1, 4, 1].count(1)
3
重要提示:如果您正在计算多个不同的项目,这会非常缓慢
每个计数调用都会遍历n个元素的整个列表。在循环中调用计数n次意味着总共检查n次,这可能会对性能造成灾难性影响。
如果要计数多个项目,请使用计数器,它只进行n次总检查。
如果您想一次计算所有值,可以使用numpy数组和bincount非常快速地完成,如下所示
import numpy as np
a = np.array([1, 2, 3, 4, 1, 4, 1])
np.bincount(a)
这给出了
>>> array([0, 3, 1, 1, 2])
使用%timeit查看哪个操作更有效。np.array计数操作应该更快。
from collections import Counter
mylist = [1,7,7,7,3,9,9,9,7,9,10,0]
types_counts=Counter(mylist)
print(types_counts)
如果你能使用熊猫,那么value_counts就在那里救援。
>>> import pandas as pd
>>> a = [1, 2, 3, 4, 1, 4, 1]
>>> pd.Series(a).value_counts()
1 3
4 2
3 1
2 1
dtype: int64
它还会根据频率自动对结果进行排序。
如果希望结果在列表中,请执行以下操作
>>> pd.Series(a).value_counts().reset_index().values.tolist()
[[1, 3], [4, 2], [3, 1], [2, 1]]
list.count(x)返回x在列表中出现的次数
参见:http://docs.python.org/tutorial/datastructures.html#more-在列表上