python 系统学习笔记(十四)---排序
2013-03-12 12:00
585 查看
在 Python 中, 当需要对一个 list 排序时, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]).
其中:
cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数.
key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.
reverse 是一个布尔值, 表示是否反转比较结果.
1.cmp
我们希望按照自己定义的排序规则来排序(例如,按关键词的权重排序,按人的年龄排序,等等)。
若List中每个元素都是2-tuple,tuple中第一个元素为String类型的keyword,第二个元素为该字符串对应的权重(int类型),希望按照权重排序(从高到低),则可以这样:
def my_cmp(E1, E2):
return -cmp(E1[1], E2[1]) #compare weight of each 2-tuple
#return the negative result of built-in cmp function
#thus we get the descend order
L = [('a', 11), ('b', 10), ('c', 12)]
L.sort(my_cmp)
print L
2.按照key 排序 这个会比cmp 执行次数少
def my_key(E1):
return E1[1] #return key 11,10,12
L = [('a', 11), ('b', 10), ('c', 12)]
L.sort(key=my_key,reverse=1) #key 大到小 reverse=0 时候从小到大
print L
3. itemgetter 返回 多排序
简单介绍itemgetter
按照key排序
按照key (1,2)排序 11 11 12为主 B A C 次要排序
4 对由字典排序
返回pair
习题
把1 和2 的内容用 lambda 实现
其中:
cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数.
key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.
reverse 是一个布尔值, 表示是否反转比较结果.
1.cmp
我们希望按照自己定义的排序规则来排序(例如,按关键词的权重排序,按人的年龄排序,等等)。
若List中每个元素都是2-tuple,tuple中第一个元素为String类型的keyword,第二个元素为该字符串对应的权重(int类型),希望按照权重排序(从高到低),则可以这样:
def my_cmp(E1, E2):
return -cmp(E1[1], E2[1]) #compare weight of each 2-tuple
#return the negative result of built-in cmp function
#thus we get the descend order
L = [('a', 11), ('b', 10), ('c', 12)]
L.sort(my_cmp)
print L
2.按照key 排序 这个会比cmp 执行次数少
def my_key(E1):
return E1[1] #return key 11,10,12
L = [('a', 11), ('b', 10), ('c', 12)]
L.sort(key=my_key,reverse=1) #key 大到小 reverse=0 时候从小到大
print L
3. itemgetter 返回 多排序
简单介绍itemgetter
from operator import itemgetter, attrgetter a = [1,2,3] b=itemgetter(1) print b(a) b=itemgetter(1,0) print b(a) b=itemgetter(1) print b(a) b=itemgetter(1,0) print b(a)
按照key排序
from operator import itemgetter, attrgetter L = [('a', 11), ('b', 10), ('c', 12)] L.sort(key=itemgetter(1)) print L
按照key (1,2)排序 11 11 12为主 B A C 次要排序
from operator import itemgetter, attrgetter L = [('a', 11,'B'), ('b', 11,'A'), ('c', 12,'C')] L.sort(key=itemgetter(1,2)) print L
4 对由字典排序
d = {'data1':3, 'data2':1, 'data3':2, 'data4':4} sorted(d.iteritems(), key=itemgetter(1), reverse=True) print d
返回pair
d = {'data1':3, 'data2':1, 'data3':2, 'data4':4} a=sorted(d.iteritems(), key=itemgetter(1), reverse=True) print a
习题
把1 和2 的内容用 lambda 实现
#1. L = [('a', 11), ('b', 10), ('c', 12)] L.sort(lambda elem1,elem2: cmp(elem1[1],elem2[1])) print L #2. L = [('a', 11), ('b', 10), ('c', 12)] L.sort(key=lambda elem: elem[1]) print L
相关文章推荐
- python 系统学习笔记(十四)---排序
- Python--小甲鱼学习笔记--第30课:文件系统(os、os.path)
- python 系统学习笔记(五)---字典
- Python学习笔记(3)——Django开发Web系统
- Python学习笔记(十四)----Python数字
- 14. Python脚本学习笔记十四异常
- python 制作图表 matplotlib - 千月的python linux 系统管理指南学习笔记(18)
- 【python学习笔记】17:numpy数组排序
- python 系统学习笔记(二)---string
- python 系统学习笔记(四)--list
- python学习笔记十四:wxPython Demo
- 【学习笔记】python版选择排序和插入排序及时间复杂度分析
- python httplib urllib的使用 - 千月的python linux 系统管理指南学习笔记(21)
- python 学习笔记十四 jQuery案例详解(进阶篇)
- python 系统学习笔记(六)---元组
- python 系统学习笔记(十五)---正则表达式
- IPython下目录的操作-魔力函数(cd pwd bookmark dhist )- 千月的python linux 系统管理指南学习笔记(7)
- 一些关于Python的基础知识 - 千月的python linux 系统管理指南学习笔记(3)
- Python 标准输入输出 StringIO urllib- 千月的python linux 系统管理指南学习笔记(16)
- python 系统学习笔记(十二) -- ---os os.path os.walk