我有一个清单:list = [A, B, C, D, A, A, A, B, E, C, C, E, D, A, B]
我想计算每个元素的外观,所以我可以使用函数count
。但我想创建一个包含元组(element, number_of_reps)
的表,它是:
[(A,5),(B,3),(C,3),(D,2),(E,2)]。
我想把它作为:
newlist = []
for i in list:
rep = list.count(i)
tup = (i, rep)
if tup not in newlist:
newlist.append(tup)
但我可以做得更好:更快还是使用任何内置功能?
答案 0 :(得分:5)
使用collections.Counter
。它有most_common
方法,可以完全按照你想要的方式...
>>> import collections
>>> A, B, C, D, E = 'ABCDE'
>>> lst = [A, B, C, D, A, A, A, B, E, C, C, E, D, A, B]
>>> collections.Counter(lst).most_common()
[('A', 5), ('C', 3), ('B', 3), ('E', 2), ('D', 2)]
计数器是一个字典,它包含键的映射到输入迭代中看到键的次数。
>>> collections.Counter(lst)
Counter({'A': 5, 'C': 3, 'B': 3, 'E': 2, 'D': 2})
most_common
只是一个简单的方法来获取输入中N
最常见元素的句柄 - 没有参数,它只是根据计数对项目进行排序。
答案 1 :(得分:1)
使用collections.Counter
。界面类似于字典界面,您可以调用most_common
来准确提供所需的输出:
>>> import collections
>>> some_list = ["A", "B", "C", "D", "A", "A", "A", "B", "E", "C", "C", "E", "D", "A", "B"]
>>> counter = collections.Counter(some_list)
>>> counter.most_common()
[('A', 5), ('C', 3), ('B', 3), ('E', 2), ('D', 2)]