Python的sort函式和sorted、lambda和cmp
阿新 • • 發佈:2019-01-27
Sorting basic:
>>> print sorted([5, 2, 3, 1, 4])[1, 2, 3, 4, 5]
>>> L = [5, 2, 3, 1, 4]
>>> L.sort()
>>> print L
[1, 2, 3, 4, 5]
Sorting cmp:
>>>L = [('b',2),('a',1),('c',3),('d',4)]>>>print sorted(L,cmp=lambda x,y:cmp(x[1],y[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
Sorting keys:
>>>L = [('b',2),('a',1),('c',3),('d',4)]>>>print sorted(L, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
Sorting reverse:
>>> print sorted([5, 2, 3, 1, 4], reverse=True)[5, 4, 3, 2, 1]
>>> print sorted([5, 2, 3, 1, 4], reverse=False)
[1, 2, 3, 4, 5]
注:效率key>cmp(key比cmp快)
在Sorting Keys中:我們看到,此時排序過的L是僅僅按照第二個關鍵字來排的,如果我們想用第二個關鍵字
排過序後再用第一個關鍵字進行排序呢?
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> print sorted(L, key=lambda x:(x[1],x[0]))
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
2、lambda表示式
lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda表示式是起到一個函式速寫的作用。允許在程式碼內嵌入一個函式的定義。
如下例子:
定義了一個lambda表示式,求三個數的和。
再看一個例子:
用lambda表示式求n的階乘。
lambda表示式也可以用在def函式中。
這裡定義了一個action函式,返回了一個lambda表示式。其中lambda表示式獲取到了上層def作用域的變數名x的值。
a是action函式的返回值,a(22),即是呼叫了action返回的lambda表示式。
這裡也可以把def直接寫成lambda形式。如下