Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting - Fatal编程技术网

Python 为什么按字符频率代码排序字符串不起作用?

Python 为什么按字符频率代码排序字符串不起作用?,python,sorting,Python,Sorting,所以问题是:给定一个字符串,根据字符的频率按降序排序 例:“树” 返回:“eert”或“eetr”都是有效答案 所以我的想法是创建一个计数器来保存freq数,然后按freq按相反顺序排序。然而,它并没有通过所有的测试用例。例如,它适用于“tree”,但不适用于“longeststringhere”,返回“eeengststrngrloih”,这不是有效的答案,因为所有相同的字符必须分组在一起。关于为什么我的代码不起作用的想法 代码: 请尝试以下操作: def frequencySort(self

所以问题是:给定一个字符串,根据字符的频率按降序排序

例:“树” 返回:“eert”或“eetr”都是有效答案

所以我的想法是创建一个计数器来保存freq数,然后按freq按相反顺序排序。然而,它并没有通过所有的测试用例。例如,它适用于“tree”,但不适用于“longeststringhere”,返回“eeengststrngrloih”,这不是有效的答案,因为所有相同的字符必须分组在一起。关于为什么我的代码不起作用的想法

代码:

请尝试以下操作:

def frequencySort(self, s: str) -> str:
    freq = collections.Counter(s)
    sorted_by_value = dict(sorted(freq.items(), key=lambda item: item[1], reverse=True))
    return''.join([char * freq[char] for char in sorted_by_value])
首先,我们得到每个字符显示的次数:

freq = collections.Counter(s)
然后我们按值排序

sorted_by_value = dict(sorted(freq.items(), key=lambda item: item[1], reverse=True))
最后,我们对每个字符(即映射的键)进行迭代,并将该字符“value”重复几次,然后将所有内容连接到一个字符串中:

return''.join([char * freq[char] for char in sorted_by_value])
输出:

eeennggssttrrloih
请尝试以下操作:

def frequencySort(self, s: str) -> str:
    freq = collections.Counter(s)
    sorted_by_value = dict(sorted(freq.items(), key=lambda item: item[1], reverse=True))
    return''.join([char * freq[char] for char in sorted_by_value])
首先,我们得到每个字符显示的次数:

freq = collections.Counter(s)
然后我们按值排序

sorted_by_value = dict(sorted(freq.items(), key=lambda item: item[1], reverse=True))
最后,我们对每个字符(即映射的键)进行迭代,并将该字符“value”重复几次,然后将所有内容连接到一个字符串中:

return''.join([char * freq[char] for char in sorted_by_value])
输出:

eeennggssttrrloih

问题是,当字符串有重复的字母时,查找将不止一次。要解决此问题,只需删除角色的第一个实例以外的所有实例

类解决方案:
定义频率排序(self,s:str)->str:
freq=集合。计数器
返回“.join(已排序(list(dict.fromkeys(list)))key=lambda x:freq[x],reverse=True))
返回“engstrloih”

一种更好的写作方式是:

类解决方案:
定义频率排序(self,s:str)->str:
freq=集合。计数器
唯一字母=列表(dict.fromkeys(列表)))
返回“”。连接(已排序(唯一字母,key=lambda x:freq[x],reverse=True))

问题在于,当字符串中有重复的字母时,查找会不止一次。要解决此问题,只需删除角色的第一个实例以外的所有实例

类解决方案:
定义频率排序(self,s:str)->str:
freq=集合。计数器
返回“.join(已排序(list(dict.fromkeys(list)))key=lambda x:freq[x],reverse=True))
返回“engstrloih”

一种更好的写作方式是:

类解决方案:
定义频率排序(self,s:str)->str:
freq=集合。计数器
唯一字母=列表(dict.fromkeys(列表)))
返回“”。连接(已排序(唯一字母,key=lambda x:freq[x],reverse=True))

我预计dreamcrash的方法会更快,但您的方法的一个快速修复方法是显式地按频率排序,然后按值本身排序。(作为旁注:
sorted
可以在任何iterable上调用,正是因为它不需要关心该iterable的内部结构。)


我预计dreamcrash的方法会更快,但您的方法的一个快速修复方法是显式地按频率排序,然后按值本身排序。(作为旁注:
sorted
可以在任何iterable上调用,正是因为它不需要关心该iterable的内部结构。)


啊,澄清-字母必须组合在一起。啊,澄清-字母必须组合在一起。啊,需要稍微澄清-字母需要组合在一起。因此,您确实需要多个字符,但字符本身需要分组,并按频率顺序(从高到低)排列。所以“longeststringhere”会在你和Karl的评论之间返回类似“eeenggssttrlooh”的内容我开始了解为什么它不起作用了-我如何利用排序功能将所有相同的字符分组在一起?规范非常松散。许多不同的结果将满足所述的要求。是的,得到了。需要将其更改为已排序(list(s),key=lambda x:(freq[x],x),reverse=True)以对字符进行分组。谢谢@Mike、Karl和@dreamcrash!:)不客气:)啊,需要稍微澄清一下——信件需要分组。因此,您确实需要多个字符,但字符本身需要分组,并按频率顺序(从高到低)排列。所以“longeststringhere”会在你和Karl的评论之间返回类似“eeenggssttrlooh”的内容我开始了解为什么它不起作用了-我如何利用排序功能将所有相同的字符分组在一起?规范非常松散。许多不同的结果将满足所述的要求。是的,得到了。需要将其更改为已排序(list(s),key=lambda x:(freq[x],x),reverse=True)以对字符进行分组。谢谢@Mike、Karl和@dreamcrash!:)不客气:)