改爲使用collections.Counter(...)
。
In [18]: from collections import Counter
In [19]: m = ['a', 'b', 'a', 'b', 'c']
In [20]: Counter(m).most_common()
Out[20]: [('a', 2), ('b', 2), ('c', 1)]
Counter.most_common()
返回一個元組的列表,使得第一元素是字符串,第二個是它的數量和名單是由數排序。
In [21]: m2 = ['a', 'b', 'a', 'b', 'c', 'b']
In [22]: Counter(m2).most_common()
Out[22]: [('b', 3), ('a', 2), ('c', 1)]
只是爲了得到項目的列表,你可以做
In [28]: [elem for elem, _ in Counter(m2).most_common()]
Out[28]: ['b', 'a', 'c']
如果你正在尋找排序你得到的名單,改變你的方法類似
In [23]: final_list = []
In [24]: for elem in set(m2):
...: final_list.append((elem, m2.count(elem)))
...:
In [25]: from operator import itemgetter
In [26]: sorted(final_list, key=itemgetter(1))
Out[26]: [('c', 1), ('a', 2), ('b', 3)]
In [27]: sorted(final_list, key=itemgetter(1), reverse=True)
Out[27]: [('b', 3), ('a', 2), ('c', 1)]
+1對於使用標準rd圖書館。 – Exelian
當然,爲了得到一個項目列表:'[x for x,_ in Counter(m).most_common()]''。 – poke
偉大的圖書館。謝謝;這正是我需要的。 – tucson