Python: найти наиболее частые байты? - PullRequest
0 голосов
/ 09 сентября 2010

Я ищу (желательно простой) способ найти и упорядочить наиболее распространенные байты в элементе потока Python.

, например

>>> freq_bytes(b'hello world')
b'lohe wrd'

или даже

>>> freq_bytes(b'hello world')
[108,111,104,101,32,119,114,100]

В настоящее время у меня есть функция, которая возвращает список в форме list[97] == occurrences of "a". Мне нужно, чтобы это было отсортировано.

Я полагаю, что мне нужно перевернуть список, чтобы list[a] = b --> list[b] = a одновременно удалял повторы.

Ответы [ 2 ]

6 голосов
/ 09 сентября 2010

Попробуйте Счетчик класса в модуле коллекций.

from collections import Counter

string = "hello world"
print ''.join(char[0] for char in Counter(string).most_common())

Обратите внимание, что вам нужен Python 2.7 или более поздней версии.

Редактировать: Забыли возвращаемый метод most_common ()список кортежей value / count и использовал понимание списка, чтобы получить только значения.

3 голосов
/ 09 сентября 2010
def frequent_bytes(aStr):
    d = {}
    for char in aStr:
        d[char] = d.setdefault(char, 0) + 1

    myList = []
    for char, frequency in d.items():
        myList.append((frequency, char))
    myList.sort(reverse=True)

    return ''.join(myList)

>>> frequent_bytes('hello world')
'lowrhed '

Я только что попробовал что-то очевидное.Ответ @ kindall ошеломляет, все же.:)

...