Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算字符串中连续字母的数量,然后根据其频率进行排序_Python_String_Sorting_Alphabetical - Fatal编程技术网

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

Python 计算字符串中连续字母的数量,然后根据其频率进行排序,python,string,sorting,alphabetical,Python,String,Sorting,Alphabetical,我试图计算每个字母在字符串中重复的次数,然后对其进行排序。例如,假设我的字符串为: 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中实现这一点?

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

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

您可以通过以下方式实现:

from itertools import groupby
my_str = 'AADDADCBBB'

tup = [(i, len(list(l))) for i, l in groupby(my_str)]
其中
tup
是包含字母表的元组列表,其计数为:

现在,要根据字母表的计数和词典的优先顺序对这个元组进行排序,可以使用with key as
lambda x:(-x[1],x[0])

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

例如:

from operator import itemgetter
sorted_tup = sorted(tup, key=lambda x: (-x[1], x[0]))
其中,
sorted\u tup
将保存以下值:

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

看起来你已经确定了这些步骤,现在只是简单地实施它们。是的,但我不知道如何做到这一点,这就是我为什么问的原因。
[('B', 3), ('A', 2), ('D', 2), ('A', 1), ('C', 1), ('D', 1)]