python字符串频次排序_Python按频率排序字符串 – 无法使用sorted()函数排序

我有一个问题,按频率排序一个简单的字符串(我得到一个字符串作为输入,我需要将一个排序的字符串作为输出按降序返回).

让我举个例子(原始单词包含4个e,2个s,1个t,1个r和1个d;所以这些被排序):

In [1]: frequency_sort("treeseeds")

Out [1]: "eeeesstrd"

Stack Overflow上的大多数解决方案都说我应该使用sorted()函数来获取我的结果,但是,它似乎只适用于某些情况.

我做了两个应该工作的函数,但是没有一个函数可以用我的特定输入来实现(见下文).

第一个功能:

def frequency_sort(s):

s_sorted = sorted(s, key=s.count, reverse=True)

s_sorted = ''.join(c for c in s_sorted)

return s_sorted

第二功能:

import collections

def frequency_sort_with_counter(s):

counter = collections.Counter(s)

s_sorted = sorted(s, key=counter.get, reverse=True)

s_sorted = ''.join(c for c in s_sorted)

return s_sorted

使用这两个函数,我的输出如下所示:

第一个输出没问题:

In [1]: frequency_sort("loveleee")

Out [1]: "eeeellov"

第二个输出不是那么多

In [2]: frequency_sort("loveleel")

Out [2]: "leleelov"

第三个输出完全凌乱:

In [3]: frequency_sort("oloveleelo")

Out [3]: "oloeleelov"

什么可能出错?是否以某种方式连接到’o’和’l’字符?或者我只是错过了什么?

解决方法:

在多个字符具有相同频率的字符串中,您提出的算法无法区分出现次数相同的字符.你可以通过使用频率和字符本身的元组进行排序来解决这个问题.例如

In [7]: def frequency_sort(s):

s_sorted = sorted(s, key=lambda c: (s.count(c), c), reverse=True)

s_sorted = ''.join(c for c in s_sorted)

return s_sorted

...:

In [8]: frequency_sort("loveleel")

Out[8]: 'llleeevo'

标签:python,sorting,frequency,string

来源: https://codeday.me/bug/20190622/1264972.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值