0

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、同時に繰り返しを削除します。

4

2 に答える 2

6

collections モジュールでCounter クラスを試してください。

from collections import Counter

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

Python 2.7 以降が必要であることに注意してください。

編集: most_common() メソッドが値/カウント タプルのリストを返し、リスト内包表記を使用して値だけを取得するのを忘れていました。

于 2010-09-09T01:51:05.053 に答える
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 '

明らかなことを試しただけです。ただし、@ kindallの答えは揺るぎません。:)

于 2010-09-09T01:52:45.740 に答える