Python学习之sort与sorted
>>> a=[9,8,7,6,5,4,3,2,1] >>> a.sort() >>> a >>> [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> >>> b=[9,8,7,6,5,4,3,2,1] >>> c=sorted(b) >>> b [9,8,7,6,5,4,3,2,1] >>> c [1, 2, 3, 4, 5, 6, 7, 8, 9]
由以上可知,list.sort()方法会按照升序将列表重新排列,不会保留原列表。
而sorted()会返回副本,原始输入不变。
sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素x,y,如果x应该排在y前面,则返回-1;如果x应排在y后面,则返回1;如果x与y相等,则返回0。
因此,如果要实现倒序排列,只需编写一个reverse_cmp函数:
def reversed_cmp(x, y): if x > y: return -1 if x < y: return 1 return 0
如此,调用sorted()并传入reverse_cmp就可以实现倒序排列:
>>> sorted([36, 5, 12, 9, 21], reversed_cmp) [36, 21, 12, 9, 5]
任务:
对该字符串排序,忽略大小写
输入:['bob', 'about', 'Zoo', 'Credit']
输出:['about', 'bob', 'Credit', 'Zoo']
思路:
sorted()对字符串排序时,默认按照ASCII码大小比较,顺序是A,B,C...X,Y,Z...a,b,c...x,y,z
def cmp_ignore_case(s1, s2): u1 = s1.upper() u2 = s2.upper() if u1 < u2: return -1 if u1 > u2: return 1 return 0 print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)