Сортировка списка по частоте буквы в питоне (в порядке убывания) - PullRequest
5 голосов
/ 01 ноября 2011

Как и в заголовке, мне нужно написать функцию, которая будет сортировать список по частоте букв. Обычно я предоставляю свой код с тем, что у меня есть, но я не знаю, с чего начать. Я уверен, что это что-то простое, но я просто не знаю, что делать. Мне нужно, чтобы они сортировались в порядке убывания, любая помощь приветствуется, спасибо.

Ответы [ 2 ]

9 голосов
/ 01 ноября 2011

в Python 2.7 или выше вы можете использовать счетчик: 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})

согласно Отсчет частоты отсортированных слов с использованием Python

если вам нужны буквы вместо слов, вы можете пойти так:

>>> 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 голосов
/ 01 ноября 2011

Для Python2.7 + используйте collection.Counter и его most_common метод:

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

Для Python2.6 или ниже, вы можете использовать эквивалентный Счетчик рецептов .

...