2011-11-01 19 views
5

Podobnie jak w tytule, muszę napisać funkcję, która będzie sortować listę według częstotliwości liter. Normalnie dostarczyłbym mój kod z tym, co mam do tej pory, ale nie mam pojęcia, od czego zacząć. Jestem pewien, że jest to coś prostego, ale po prostu nie wiem, co robić. Potrzebuję ich posortować w malejącej kolejności, każda pomoc jest doceniana, dziękuję.Sortowanie listy według częstotliwości liter w pythonie (kolejność malejąca)

+1

Lista czego? Słowa? –

Odpowiedz

9

w Pythonie 2.7 lub wyższy można użyć licznika: http://docs.python.org/dev/library/collections.html#collections.Counter

>>> mywords = ['red', 'blue', 'red', 'green', 'blue', 'blue'] 
>>> cnt = Counter(mywords) 
>>> cnt 
Counter({'blue': 3, 'red': 2, 'green': 1}) 

zgodnie Sorted Word frequency count using python

jeśli trzeba liter zamiast słów można iść tak:

>>> mywords = ['red', 'blue', 'red', 'green', 'blue', 'blue'] 
>>> myletters=list("".join(mywords)) 
>>> myletters 
['r', 'e', 'd', 'b', 'l', 'u', 'e', 'r', 'e', 'd', 'g', 'r', 'e', 'e', 'n', 'b', 'l', 'u', 'e', 'b', 'l', 'u', 'e'] 
>>> Counter(myletters) 
4

Dla Python2.7 +, użyć collections.Counter i jego most_common metody:

import collections 

text='abccccabcbb' 
count=collections.Counter(text) 

print(count.most_common()) 
# [('c', 5), ('b', 4), ('a', 2)] 

print(''.join(letter*freq for letter,freq in count.most_common())) 
# cccccbbbbaa 

Dla python2.6 lub mniejsza, można użyć równoważnego Counter recipe.

Powiązane problemy