在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
在Python中,给定一个项目,如何在列表中计算它的出现次数?
一个相关但不同的问题是计算集合中每个不同元素的出现次数,将字典或列表作为直方图结果而不是单个整数。有关该问题,请参阅使用字典统计列表中的项目。
当前回答
可能不是最有效的,需要额外的传递才能删除重复项。
功能实现:
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}
其他回答
还可以使用内置模块运算符的countOf方法。
>>> import operator
>>> operator.countOf([1, 2, 3, 4, 1, 4, 1], 1)
3
另一种获取字典中每个项目出现次数的方法:
dict((i, a.count(i)) for i in a)
给定列表X
import numpy as np
X = [1, -1, 1, -1, 1]
显示此列表元素的i:frequency(i)的字典为:
{i:X.count(i) for i in np.unique(X)}
输出:
{-1: 2, 1: 3}
统计列表中一项的出现次数
为了只计算一个列表项的出现次数,可以使用count()
>>> l = ["a","b","b"]
>>> l.count("a")
1
>>> l.count("b")
2
计算列表中所有项目的出现次数也称为“清点”列表,或创建清点计数器。
使用count()计算所有项目
要计算l中项目的出现次数,只需使用列表理解和count()方法
[[x,l.count(x)] for x in set(l)]
(或类似于集合(l)中x的字典字典((x,l.count(x))))
例子:
>>> l = ["a","b","b"]
>>> [[x,l.count(x)] for x in set(l)]
[['a', 1], ['b', 2]]
>>> dict((x,l.count(x)) for x in set(l))
{'a': 1, 'b': 2}
使用Counter()计数所有项目
或者,集合库中有更快的Counter类
Counter(l)
例子:
>>> l = ["a","b","b"]
>>> from collections import Counter
>>> Counter(l)
Counter({'b': 2, 'a': 1})
计数器快多少?
我查了一下柜台清点清单的速度有多快。我尝试了两种方法,使用了几个n值,计数器的速度似乎快了大约2倍。
以下是我使用的脚本:
from __future__ import print_function
import timeit
t1=timeit.Timer('Counter(l)', \
'import random;import string;from collections import Counter;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]'
)
t2=timeit.Timer('[[x,l.count(x)] for x in set(l)]',
'import random;import string;n=1000;l=[random.choice(string.ascii_letters) for x in range(n)]'
)
print("Counter(): ", t1.repeat(repeat=3,number=10000))
print("count(): ", t2.repeat(repeat=3,number=10000)
输出:
Counter(): [0.46062711701961234, 0.4022796869976446, 0.3974247490405105]
count(): [7.779430688009597, 7.962715800967999, 8.420845870045014]
可能不是最有效的,需要额外的传递才能删除重复项。
功能实现:
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}