1. 程式人生 > >sort和sorted 傻傻分不聽圖

sort和sorted 傻傻分不聽圖

三種方式 控制 pac 示例 個學生 選擇 信息 .so false

sort它是把L原地排序,也就是使用後並不是返回一個有序的序列副本,而是把當前序列變得有序 sorted函數是內建函數,它接受一個序列,返回有序的副本 它與sort的唯一區別就是會返回副本 這一點是最突出的區別 sort是容器的函數:sort(cmp=None, key=None, reverse=False) sorted是python的內建函數:sorted(iterable, cmp=None, key=None, reverse=False) 參數解析: cmp:比較函數,比較什麽參數由key決定。例如:cmp(e1, e2) 是具有兩個參數的比較函數,返回值:負數(e1 < e2);0(e1 == e2);正數( e1 > e2)。 key:用列表元素的某個屬性或函數作為關鍵字。 reverse:排序規則,可以選擇True 降序 從大到小 或者 False 升序 從小到大。 sorted多一個參數iterable:待排序的可叠代類型的容器 示例1: >>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> a.sort() >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12] >>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> sorted(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12] >>> a [1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12] 區別: 對於一個無序的列表a,調用a.sort(),對a進行排序後返回a,sort()函數修改待排序的列表內容。 而對於同樣一個無序的列表a,調用sorted(a),對a進行排序後返回一個新的列表,而對a不產生影響。 示例2: 假設用元組保存每一個學生的信息,包括學號,姓名,年齡。用列表保存所有學生的信息。 >>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] >>> list1.sort() >>> list1 [(2, ‘Mike‘, 22), (5, ‘Lucy‘, 19), (8, ‘Logan‘, 20)] >>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] >>> sorted(list1) [(2, ‘Mike‘, 22), (5, ‘Lucy‘, 19), (8, ‘Logan‘, 20)] >>> list1 [(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] 小結:由示例可以看出,當列表由list(或者tuple)組成時,默認情況下,sort和sorted都會根據list[0](或者tuple[0])作為排序的key,進行排序。 以上都是默認的排序方式,我們可以編寫代碼控制兩個函數的排序行為。主要有三種方式:基於key函數;基於cmp函數和基於reverse函數 1)基於key函數排序 >>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] >>> list1.sort(key=lambda x:x[2]) >>> list1 [(5, ‘Lucy‘, 19), (8, ‘Logan‘, 20), (2, ‘Mike‘, 22)] >>> list1=[(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] >>> sorted(list1, key=lambda x:x[2]) [(5, ‘Lucy‘, 19), (8, ‘Logan‘, 20), (2, ‘Mike‘, 22)] >>> list1 [(8, ‘Logan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] 2)基於cmp函數 >>> list1=[(8, ‘Zogan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] >>> list1.sort(cmp=lambda x,y:cmp(x[1],y[1])) >>> list1 [(5, ‘Lucy‘, 19), (2, ‘Mike‘, 22), (8, ‘Zogan‘, 20)] >>> list1=[(8, ‘Zogan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] >>> sorted(list1, cmp=lambda x,y:cmp(x[1],y[1])) [(5, ‘Lucy‘, 19), (2, ‘Mike‘, 22), (8, ‘Zogan‘, 20)] >>> list1 [(8, ‘Zogan‘, 20), (2, ‘Mike‘, 22), (5, ‘Lucy‘, 19)] 3)基於reverse函數 >>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> a.sort(reverse=False) >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12] >>> a=[1,2,5,3,9,4,6,8,7,0,12] >>> a.sort(reverse=True) >>> a [12, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> a.sort(reverse=True)

sort和sorted 傻傻分不聽圖