Python:找到最常见的字节?

发布于 2024-09-18 11:46:32 字数 396 浏览 8 评论 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] == 出现的“a” 形式返回列表。我需要对其进行排序。

我想我基本上需要翻转列表,所以 list[a] = b --> list[b] = a 同时删除重复项。

I'm looking for a (preferably simple) way to find and order the most common bytes in a python stream element.

e.g.

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

or even

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

I currently have a function that returns a list in the form list[97] == occurrences of "a". I need that to be sorted.

I figure I basically need to flip the list so list[a] = b --> list[b] = a at the same time removing the repeates.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里泪两行 2024-09-25 11:46:32

尝试集合模块中的 Counter 类

from collections import Counter

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

请注意,您需要 Python 2.7 或更高版本。

编辑:忘记了most_common()方法返回了值/计数元组的列表,并使用列表理解来获取值。

Try the Counter class in the collections module.

from collections import Counter

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

Note you need Python 2.7 or later.

Edit: Forgot the most_common() method returned a list of value/count tuples, and used a list comprehension to get just the values.

慢慢从新开始 2024-09-25 11:46:32
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 的回答很震撼。 :)

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 '

I just tried something obvious. @kindall's answer rocks, though. :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文