• 练习-字典按值排序


    需求

    最近在看工作机会, 然后做了一道华为外包的笔试题.

    1. 输入:  "eaaabbccccddderrfc"
    2. 要求:
        ​    2.1 按字母出现次数降序排列输出, 如果次数相同,则按自然顺序排序
        ​    2.2 不能用Python 内置的排序函数
        输出:  c:5;a:3;d:3;b:2;e:2;r:2;f:1;
    

    我咋眼一看, 这种送分题, 能难住我?

    • 构造一个字典, 统计词频
    • sorted() 按值排序即可

    求解

    用内置函数sorted()

    my_str =  "eaaabbccccddderrfc"
    
    # 统计词频
    d = {}
    for s in my_str:
        if d.get(s):
            d[s] += 1
        else:
            d[s] = 1
            
    # 字典按值排序, sorted()
    sorted(d.items(), key=lambda arr: arr[1], reverse=True)
    
    [('c', 5), ('a', 3), ('d', 3), ('e', 2), ('b', 2), ('r', 2), ('f', 1)]
    

    正准备提交, 才发现, 不能用内置, 要自己写排序, 这一下, 难度立马升级了

    • 短时间内要写出排序算法
    • 数据要如何组织

    本来想写个快排, 结果那一刻, 竟然写不出来, 果然平时练习和真正测试,不刷题真的搞不定, 还好会写个冒泡, 差点就凉凉了.

    '''
    1. 输入:  "eaaabbccccddderrfc"
    2. 要求:
        ​    2.1 按字母出现次数降序排列输出, 如果次数相同,则按自然顺序排序
        ​    2.2 不能用Python 内置的排序函数
        输出:  c:5;a:3;d:3;b:2;e:2;r:2;f:1;
    '''
    
    # 词频统计
    def word_count(my_str):
        """输入一个字符串, 统计每个字母的频率"""
        d = {}
        for s in my_str:
            if d.get(s):
                d[s] += 1
            else:
                d[s] = 1
        return d
    
    
    def my_sort(lst):
        """输入一个数组, 按降序排列"""
        n = len(lst)
        if n == 1:
            return lst
        for i in range(n):
            for j in range(n - 1 - i):
                if lst[j] < lst[j + 1]:
                    # 交换顺序
                    lst[j], lst[j + 1] = lst[j + 1], lst[j]
        return lst
    
    
    if __name__ == '__main__':
        
        my_str = "eaaabbccccddderrfc"
        d = word_count(my_str)
        desc_keys = my_sort(list(d.values()))
        lst_ret = []
        for i in desc_keys:
            for k, v in d.items():
                if i == v:
                    lst_ret.append((k, v))
                    d.pop(k)
                    break
        # 输出效果
        for s in lst_ret:
            print(f"{s[0]}:{s[1]}", end=";")
    
    c:5;a:3;d:3;e:2;b:2;r:2;f:1;
    

    平时多积累, 唯手熟尔呀, 不过好像还是没有做到按自然顺序排列哦.

  • 相关阅读:
    爬虫基础
    设计BBS
    中间件和auth模块
    git
    分页器与form表单
    cookie与session
    springboot2.x基础教程:@Enable原理
    springboot2.x基础教程:@Scheduled开启定时任务及源码分析
    springboot2.x基础教程:@Async开启异步任务
    springboot2.x基础教程:JRebel实现SpringBoot热部署
  • 原文地址:https://www.cnblogs.com/chenjieyouge/p/11894052.html
Copyright © 2020-2023  润新知