统计字符串中连续字母的个数,然后按出现频率排序

Counting the number of continuous alphabets in string, and then sort based on their frequency

我正在尝试计算每个字母在字符串中重复的次数,然后对其进行排序。例如,假设我的字符串是:

AADDADCBBB

我想创建一个函数来 return 每个字母在一行中重复的次数;在这种情况下,我们会得到:

"A: 2, D: 2, A: 1, D: 1, C: 1, B: 3"

然后,我希望能够根据以下内容对其进行排序:

预期结果是:

"B: 3, A: 2, D: 2, A: 1, C: 1, D: 1"

如何在 Python 中执行此操作?

您可以使用 itertools.groupby() 实现此目的:

from itertools import groupby
my_str = 'AADDADCBBB'

tup = [(i, len(list(l))) for i, l in groupby(my_str)]

其中 tup 是包含 alphabet 的元组列表,它的 count 为:

[('A', 2), ('D', 2), ('A', 1), ('D', 1), ('C', 1), ('B', 3)]

现在,要根据字母的数量然后根据字典顺序对元组进行排序,您可以使用 sorted(),键为 lambda x: (-x[1], x[0])

此处,-[1] 将根据第 1 索引处元素值的降序对元组进行排序。如果多个元组的此值相同,则将在 x[0] 上进行二次排序。它将根据第 0 个索引中存在的元素按升序排序。

例如:

from operator import itemgetter
sorted_tup = sorted(tup, key=lambda x: (-x[1], x[0]))

其中 sorted_tup 将保存值:

[('B', 3), ('A', 2), ('D', 2), ('A', 1), ('C', 1), ('D', 1)]