2010-09-09 5 views
0

Я ищу (желательно простой) способ найти и упорядочить наиболее распространенные байты в элементе потока python.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 одновременно удалял повторы.

+1

Итак, что вы пробовали? А что насчет недовольства? Мы здесь не для того, чтобы делать всю работу за вас. –

+0

Я пробовал кучу вещей. Большинство из них очень длинные и замученные, и они не работают. У меня есть что-то, что учитывает вхождения элементов, но я не могу их заказывать. Эта функция возвращает список, в котором список [97] = вхождения «a» – Violet

+0

это то, что я получаю для программирования в 22:00 ... – Violet

ответ

6

Пробуйте Counter class в модуле коллекций.

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 и использовал понимание списка, чтобы получить только значения.

+0

+1 и добавлена ​​ссылка на документацию – bernie

+0

Я на 3.1, поэтому я не знаю, Думаю, это проблема. – Violet

3
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 ' 

Я просто попробовал что-то очевидное. Тем не менее, ответ на этот вопрос отвечает. :)

+0

+1 для усилий. обратите внимание, что даже если вы не используете 2.7+, вы можете использовать 'collections.defaultdict' – bernie

+0

Aw, это функция, о которой я не мог думать. Благодаря! – Mike

Смежные вопросы