zoukankan      html  css  js  c++  java
  • python 排序

      由于排序在编程应用中占有很大的比重,此次学习主要利用python中的DSU方法(decorate-sort-undecorate)。列表的sort方法和内建的sorted函数提供了一个快速、原生的DSU实现。

      具体应用实例:

      1、对字典进行排序

      

    def sortedDict(xdict):
        keys = xdict.keys()
        keys.sort()
        return map(xdict.get, keys)
    

       通过map(xdict.get, key)比列表推导[xdict[key] for key in keys]速度提升大概20%

      2、根据对应键值或索引排序:(需要统计不同元素出现的次数,并且根据它们出现的次数安排它们的排序,比如制作一个柱状图)

      

    class Hist(dict):
        
        def add(self, item, inc=1)
            self[item] = inc + self.get(item, 0)
    
        def counts(self):
            aux = [(self[k], k) for k in self]
            aux.sort()
            rerturn [k for v, k in aux]
    

       3、根据内嵌的数字将字符串排序:(举个例子:“foo2.txt”应该出现在“foo10.txt”之前,然而python默认的字符串比较是基于字母顺序的。所以默认情况下foo10.txt会出现在foo2.txt之前)

      

    files = 'file123.txt file89.txt file45.txt file98.txt'
    import re
    re_digist = re.compile(r'(d+)')
    x = [(map(int, re_digist.split(x)[1::2]), x) for x in files]
    x.sort()
    

     此时输出的x为:

    [([45], 'file45.txt'), ([89], 'file89.txt'), ([98], 'file98.txt'), ([123], 'file123.txt')],可以看出文件已经按照字符串中出现的数字完成预想的排序效果。

      

  • 相关阅读:
    WinForm里保存TreeView状态
    动态规划 回溯和较难题
    go 基本链表操作
    leetcode 42接雨水
    leetcode 旋转数组搜索
    leetcode 牛客编程 子序列 树 数组(积累)
    剑指offer(积累)
    go快排计算最小k个数和第k大的数
    leetcode 打家劫舍
    leetcode 字符串相关问题
  • 原文地址:https://www.cnblogs.com/kirago/p/4691014.html
Copyright © 2011-2022 走看看