在python中返回前n个最常出现的字符及其各自的计数

 司文龙2502933797 发布于 2023-02-04 16:50

如何返回前n个最常出现的字符及其各自的计数#例如'aaaaaabbbbcccc',2应该[('a', 6), ('b', 4)]在python中返回

我试过这个

def top_chars(input, n):
    list1=list(input)
    list3=[]
    list2=[]
    list4=[]
    set1=set(list1)
    list2=list(set1)
    def count(item):
        count=0
        for x in input:
            if x in input:
                count+=item.count(x)
        list3.append(count)
        return count

    list2.sort(key=count)

    list3.sort()
    list4=list(zip(list2,list3))
    list4.reverse()
    list4.sort(key=lambda list4: ((list4[1]),(list4[0])), reverse=True)
    return list4[0:n]
    pass

但它不适用于输入("aabc",2)它应该给出的输出是

[('a', 2), ('b', 1)]

但我得到的输出是

[('a', 2), ('c', 1)]

Martijn Piet.. 8

使用collections.Counter(); 它有一个most_common()方法可以做到这一点:

>>> from collections import Counter
>>> counts = Counter('aaaaaabbbbcccc')
>>> counts.most_common(2)
[('a', 6), ('c', 4)]

请注意,上述两个输入和aabc两个bc具有相同的数,都可以有效的顶级竞争者.因为你和Counter按计数排序然后键入反向,c之前排序b.

如果不是反向排序,您使用的是数为排序键,你的排序bc再次:

list4.sort(key=lambda v: (-v[1], v[0))

Counter.most_common()当你要求的物品少于柜台上的钥匙时,实际上并没有使用分拣; 它使用heapq基于算法的方法来获得前N个项目.

1 个回答
  • 使用collections.Counter(); 它有一个most_common()方法可以做到这一点:

    >>> from collections import Counter
    >>> counts = Counter('aaaaaabbbbcccc')
    >>> counts.most_common(2)
    [('a', 6), ('c', 4)]
    

    请注意,上述两个输入和aabc两个bc具有相同的数,都可以有效的顶级竞争者.因为你和Counter按计数排序然后键入反向,c之前排序b.

    如果不是反向排序,您使用的是数为排序键,你的排序bc再次:

    list4.sort(key=lambda v: (-v[1], v[0))
    

    Counter.most_common()当你要求的物品少于柜台上的钥匙时,实际上并没有使用分拣; 它使用heapq基于算法的方法来获得前N个项目.

    2023-02-04 16:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有