由于排序在编程应用中占有很大的比重,此次学习主要利用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')],可以看出文件已经按照字符串中出现的数字完成预想的排序效果。