1. 程式人生 > >Python的sort函式和sorted、lambda和cmp

Python的sort函式和sorted、lambda和cmp

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只是一個表示式,函式體比def簡單很多。
lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda表示式是起到一個函式速寫的作用。允許在程式碼內嵌入一個函式的定義。
如下例子:


定義了一個lambda表示式,求三個數的和。

再看一個例子:

用lambda表示式求n的階乘。


lambda表示式也可以用在def函式中。

這裡定義了一個action函式,返回了一個lambda表示式。其中lambda表示式獲取到了上層def作用域的變數名x的值。

a是action函式的返回值,a(22),即是呼叫了action返回的lambda表示式。

這裡也可以把def直接寫成lambda形式。如下