當前位置:編程學習大全網 - 編程語言 - 如何對列表進行排序 python

如何對列表進行排序 python

很多時候,我們需要對List進行排序,Python提供了兩個方法,對給定的List L進行排序:

方法1.用List的成員函數sort進行排序

方法2.用built-in函數sorted進行排序(從2.4開始)

這兩種方法使用起來差不多,以第壹種為例進行講解:

從Python2.4開始,sort方法有了三個可選的參數,Python Library Reference裏是這樣描述的

復制代碼代碼如下:

cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument:

"cmp=lambda x,y: cmp(x.lower(), y.lower())"

key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower"

reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an

equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once.

以下是sort的具體實例。

實例1:

復制代碼代碼如下:

>>>L = [2,3,1,4]

>>>L.sort()

>>>L

>>>[1,2,3,4]

實例2:

復制代碼代碼如下:

>>>L = [2,3,1,4]

>>>L.sort(reverse=True)

>>>L

>>>[4,3,2,1]

實例3:

復制代碼代碼如下:

>>>L = [('b',2),('a',1),('c',3),('d',4)]

>>>L.sort(cmp=lambda x,y:cmp(x[1],y[1]))

>>>L

>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

實例4:

復制代碼代碼如下:

>>>L = [('b',2),('a',1),('c',3),('d',4)]

>>>L.sort(key=lambda x:x[1])

>>>L

>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

實例5:

復制代碼代碼如下:

>>>L = [('b',2),('a',1),('c',3),('d',4)]

>>>import operator

>>>L.sort(key=operator.itemgetter(1))

>>>L

>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

實例6:(DSU方法:Decorate-Sort-Undercorate)

復制代碼代碼如下:

>>>L = [('b',2),('a',1),('c',3),('d',4)]

>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort

>>>A.sort()

>>>L = [s[2] for s in A]

>>>L

>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

以上給出了6中對List排序的方法,其中實例3.4.5.6能起到對以List item中的某壹項

為比較關鍵字進行排序.

效率比較:

復制代碼代碼如下:

cmp < DSU < key

通過實驗比較,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相當

多關鍵字比較排序:

實例7:

復制代碼代碼如下:

>>>L = [('d',2),('a',4),('b',3),('c',2)]

>>> L.sort(key=lambda x:x[1])

>>> L

>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]

我們看到,此時排序過的L是僅僅按照第二個關鍵字來排的,如果我們想用第二個關鍵字

排過序後再用第壹個關鍵字進行排序呢?有兩種方法

實例8:

復制代碼代碼如下:

>>> L = [('d',2),('a',4),('b',3),('c',2)]

>>> L.sort(key=lambda x:(x[1],x[0]))

>>> L

>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

實例9:

復制代碼代碼如下:

>>> L = [('d',2),('a',4),('b',3),('c',2)]

>>> L.sort(key=operator.itemgetter(1,0))

>>> L

>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

為什麽實例8能夠工作呢?原因在於tuple是的比較從左到右之壹比較的,比較完第壹個,如果

相等,比較第二個

  • 上一篇:求壹份關於機電壹體化專業的實習日誌,還有壹份頂崗實習報告,最好是關於制圖或是鉗工方面的
  • 下一篇:幫幫計算幾個數。
  • copyright 2024編程學習大全網