在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
当前回答
sum([1 for elem in <yourlist> if elem==<your_value>])
这将返回值的出现次数
其他回答
可能不是最有效的,需要额外的传递才能删除重复项。
功能实现:
arr = np.array(['a','a','b','b','b','c'])
print(set(map(lambda x : (x , list(arr).count(x)) , arr)))
返回:
{('c', 1), ('b', 3), ('a', 2)}
或返回为dict:
print(dict(map(lambda x : (x , list(arr).count(x)) , arr)))
返回:
{'b': 3, 'c': 1, 'a': 2}
另一种获取字典中每个项目出现次数的方法:
dict((i, a.count(i)) for i in a)
还可以使用内置模块运算符的countOf方法。
>>> import operator
>>> operator.countOf([1, 2, 3, 4, 1, 4, 1], 1)
3
使用itertools.groupby()对所有元素进行计数
通过itertools.groupby()可以获得列表中所有元素的计数。
具有“重复”计数
from itertools import groupby
L = ['a', 'a', 'a', 't', 'q', 'a', 'd', 'a', 'd', 'c'] # Input list
counts = [(i, len(list(c))) for i,c in groupby(L)] # Create value-count pairs as list of tuples
print(counts)
退换商品
[('a', 3), ('t', 1), ('q', 1), ('a', 1), ('d', 1), ('a', 1), ('d', 1), ('c', 1)]
请注意,它是如何将前三个a组合为第一个组的,而其他a组在列表的后面。这是因为输入列表L未排序。如果小组实际上应该是分开的,这有时会是一个好处。
具有唯一计数
如果需要唯一的组计数,只需对输入列表进行排序:
counts = [(i, len(list(c))) for i,c in groupby(sorted(L))]
print(counts)
退换商品
[('a', 5), ('c', 1), ('d', 2), ('q', 1), ('t', 1)]
注意:为了创建唯一计数,与groupby解决方案相比,许多其他答案提供了更简单、更可读的代码。但这里显示的是与重复计数示例平行。
为什么不使用Pandas?
import pandas as pd
my_list = ['a', 'b', 'c', 'd', 'a', 'd', 'a']
# converting the list to a Series and counting the values
my_count = pd.Series(my_list).value_counts()
my_count
输出:
a 3
d 2
b 1
c 1
dtype: int64
如果您正在查找特定元素的计数,例如a,请尝试:
my_count['a']
输出:
3