统计字符串中连续字母的个数,然后按出现频率排序
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)]
我正在尝试计算每个字母在字符串中重复的次数,然后对其进行排序。例如,假设我的字符串是:
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)]