Python:快速创建代表列表的方法

时间:2014-08-11 17:43:16

标签: python list

我有一个清单: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)

但我可以做得更好:更快还是使用任何内置功能?

2 个答案:

答案 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)]