【发布时间】:2017-11-08 21:39:14
【问题描述】:
我在按频率对简单字符串进行排序时遇到问题(我得到一个字符串作为输入,我需要按降序将排序后的字符串作为输出返回)。 举个例子(原词有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”字符相关联?还是我只是错过了什么?
【问题讨论】:
-
我想你忘记添加第三个函数了。
标签: python string sorting frequency