1. 程式人生 > >Python筆記01:sort min/max map/filter/reduce 列表解析 詳解

Python筆記01:sort min/max map/filter/reduce 列表解析 詳解

1、sorted(iterable[, cmp[, key[, reverse]]])

cmp:用於對比函式用於比較迭代物件中的元素的大小。我們在這裡暫且不討論sort函式用的是哪種排序(其實sort還是挺智慧的,會根據不同的資料選擇合適的排序演算法),在排序過程中都需要對元素進行大小比較,這時便會呼叫cmp這個引數所提供的函式,如果不提供比較函式的話,python預設使用的是內建函式cmp(),對於cmp(x,y),if x>y,return 1,x<y,return -1,x=y,return 0.根據cmp函式的返回值作為排序標準。我們可以重新定義他的比較函式,是他規則變化,比如(實現逆序):

def mycmp(x,y):

return y-x

#我們沒有把return的結果定義成-1,1,0,因為sort是要通過>0,<0<,=0來進行判斷的,所以不必定義成return -1,1,0

#引用函式時不要加括號即sorted(iterable,cmp=mycmp)而不是sorted(iterable,cmp=mycmp())

key:相當於對可迭代物件iterable每個元素的預處理。iterable=[obj1,obj2,obj3] ,通過cmp(key_fun(obj_m),key_func(obj_n))的結果進行排序,如果key=None,則通過cmp(obj_m,obj_n)進行排序。

比如:sorted([[1,2,3],[2,3,5]],cmp=mycmp,key=lambda x:x[1])即根據[2,3]通過mycmp的結果進行排序

reverse:是否逆序True為逆序

2、min max

max(iterable[, key])

max(arg1, arg2, *args[, key])

例子max([1,2,3])max(1,2,3)key同上

3、map/filter/reduce

這三個函式都用於處理可迭代物件

map:對映,生成一個需輸入等長的列表,輸入跟輸出每個元素通過func一一對映

map(func,iter)      map(lambda x:x+1,[0,1,2])  ->  [1,2,3]

filter:篩選,篩選出func輸出為true元素組成列表,func的返回值理論上需要布林值(其實其他值也行,布林值易讀性更好)

filter(func,iter)       filter(lambda x:True if x>0 else False,[0,1,2])-->[1,2]

reduce(func, iter[, initializer]):func是一個有兩個輸入和一個輸出的函式類似於 def func(x,y):return onlyone reduce函式從左到右執行func

比如reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5)。 initializer是可選的初始化函式,是初始化最後的reduce輸出的,比如上述的例子中,改為reduce(lambda x, y: x+y, [1, 2, 3, 4, 5],initializer=100) calculates(100+ ((((1+2)+3)+4)+5))

reduce(lambda x, y: x+y, [1, 2, 3],initializer=100)=106等價於下面的函式:

def myreduce(List):

init=100

for i in List:

init+=i

return init

myreduce([1,2,3])=106

3、列表解析

主要是用來將可迭代物件生成列表

我們可以用列表解析實現上述幾個函式的功能(列表解析挺好用的)

列表解析實現map:

print [i+1 for i in [1,2,3]] -> [2,3,4]

列表解析實現filter:

print [i for i in range(3) if i >0] ->[2,3]

reduce:這個沒有想到好的實現,如果您有歡迎回複本部落格