计算字符串中连续字母的数量,然后根据其频率进行排序

2024-04-18 22:39:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

AADDADCBBB

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

"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中实现这一点


Tags: 函数字符串排序顺序字母情况次数频率
1条回答
网友
1楼 · 发布于 2024-04-18 22:39:24

您可以使用^{}实现以下目的:

from itertools import groupby
my_str = 'AADDADCBBB'

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

其中tup是包含字母的元组列表,其计数为:

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

现在,要根据字母表的计数对这个元组进行排序,然后根据字典的优先顺序,可以使用^{},键为lambda x: (-x[1], x[0])

这里,-[1]将根据1st索引处元素值的降序对元组进行排序。如果多元组的此值相同,则将在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)]

相关问题 更多 >