使用PHP或Python按计数对字符排序

使用PHP或Python按计数对字符排序,php,python,Php,Python,我有一串字符 abcdefghijklmnopqrstuvxyz 我想把这一串字符按它们在一大块字符中出现的次数进行排序。例如: 《代码》中的一篇文章介绍了《代码》中的一篇文章,这篇文章中的一部分内容是《代码》中的一部分内容是《代码》中的一篇文章,这篇文章中的一部分内容是《代码》中的一篇文章。这篇文章中的一部分内容是《代码》中的一篇文章中的一部分内容是一篇文章中的一部分内容是一篇文章,这篇文章中的一部分是关于关于对一个普通普通普通的文章中的文章中的一部分内容是关于一部分内容是关于关于关于一个关于

我有一串字符

abcdefghijklmnopqrstuvxyz

我想把这一串字符按它们在一大块字符中出现的次数进行排序。例如:

《代码》中的一篇文章介绍了《代码》中的一篇文章,这篇文章中的一部分内容是《代码》中的一部分内容是《代码》中的一篇文章,这篇文章中的一部分内容是《代码》中的一篇文章。这篇文章中的一部分内容是《代码》中的一篇文章中的一部分内容是一篇文章中的一部分内容是一篇文章,这篇文章中的一部分是关于关于对一个普通普通普通的文章中的文章中的一部分内容是关于一部分内容是关于关于关于一个关于一个关于一个关于对对对来自来自来自来自于一个普通普通普通的文章的文章的文章的北京北京北京北京北京北京北京北京北京北京北京北京的北京北京北京北京北京的一家中国的一家中国的北京北京北京北京北京北京的北京北京北京北京北京北京北京北京的北京北京的北京的北京北京北京北京的北京北京北京北京北京北京北京的北京的北京北京北京北京北京北京北京的北京北京的北京北京的gaqrnhjravksjwemoosdlxtvw_这篇文章的内容是一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于一篇关于关于关于xlj_pt_mpwubveakxfsbfgj_uuuuuuuuu

我还想删除任何字符后,包括下划线,一旦我有这些排序

递归是我需要研究的正确概念吗

编辑

可能输出的内容示例:

afiskjweocnsdkspwjrhfg


基本上,字符将根据其在一行中的频率进行排序。

您可以使用
集合。计数器
对大字符串中的字符进行计数:

import collections
walloftext = """cwrxwzbgickpjbp_svnudntddwdqbfgzyiqpuxddmpvyfquosmicfzkjekxzchngpqaksafulateukuwomdrwza_n_ptzktjzcuibnebe_tqessrzqewgkadrkvtyznaupodanwazopg_fijcoojojbsolr_ejesukzc_quochdnmti_lkvrsegyieqlqysuxdvetkqtkhxaiypfdiddztlicjurnllriopdtuuzpryrsepfydyeg_xkr_ruxp_lgqesysidfsygztwrba_ay_gaqqklbrvr_lbhawjraqujfxptmuvqfzklfodgaqrnhjravksjwemoosdlxtvw_qspxmlvqryusfixzlkb_p_c_tepzozzwnokvqspkizygoqpbhjnsxopchzgapctowbrletrunlgnvzpfwrqgedo_s_ygkxz_mpncnve_gfpbotupawevhfxvqhwlerupjfibosbvhiijrodigzyhy_iijes_xsqorshhdzkjqitpljsftpitjetwmzqiabyiewgtbjaddtsjkckcxxvlyrchloetluxkohn_uihkdjpcqgvejanslakmwendgkmvmayknvjjnr_kdapnumwvz__lsimxdtrflyleykxejl_jbkhexpcyreoapelqzzyriyrbxdgbgwrrxlj_pt_mpwubvbveakxfsbfgj___"""
wallcount = collections.Counter(walloftext)
然后使用这些计数对原始字母表进行排序:

alphabet = "abcdefghijklmnopqrstuvwxyz_"
sortedalph = sorted(alphabet, key=lambda c: wallcount[c])
(这是通过增加频率进行排序的:结果首先是频率最低的字母。如果您想让它反过来,请在lambda中的
wallcount
之前插入
-
。)

最后,将已排序的字母表连接回一个字符串,并切掉下划线及其后的所有内容:

finalalph = "".join(sortedalph).split("_")[0]

递归解决方案并没有真正浮现在脑海中,不。它将有助于了解您对输入结果的预期
<?php

$text = 'ahugechunkofatext';
$charCounts = count_chars($text, 1);
arsort($charCounts);

$chars = array_map('chr', array_keys($charCounts));
$chars = array_filter($chars, function ($char) {
    return !in_array($char, ['_']); // A list of chars that you don't want
});

echo implode('', $chars) . PHP_EOL;