Python按频率排序字符串 – 无法使用sorted()函数排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python按频率排序字符串 – 无法使用sorted()函数排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1428字,纯文字阅读大概需要3分钟。
内容图文
![Python按频率排序字符串 – 无法使用sorted()函数排序](/upload/InfoBanner/zyjiaocheng/797/45af71a491c54d50906414fa0f0213f2.jpg)
我有一个问题,按频率排序一个简单的字符串(我得到一个字符串作为输入,我需要将一个排序的字符串作为输出按降序返回).
让我举个例子(原始单词包含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按频率排序字符串 – 无法使用sorted()函数排序全部内容,希望文章能够帮你解决Python按频率排序字符串 – 无法使用sorted()函数排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。