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:這個沒有想到好的實現,如果您有歡迎回複本部落格