>>> 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)