python基礎之map/reduce/filter/sorted
---map(fun,iterable)
首先來看一看map()函數,map函數接受兩個參數,第一個參數是函數的名稱,第二個參數一個可叠代對象。即map(fun,iterable)
map函數就是將具體數值根據算法進行計算,並將結果保存為一個叠代器。我們知道,叠代器很‘懶‘,通過調用next函數一次只輸出一個值。
來看一個最簡單的map()例子。
#給定一組數1,2,3要求求出每個數加一後的值 >>> def add(x):
... x+=1
... return x
...
>>> l=[1,2,3]
>>> r=map(add,l)
>>> print(r)
<map object at 0x03E4F510>
>>> for i in r:
... print(i)
...
2
3
4
使用map對一行進行多個賦值
x,y,z=map(int,input(‘please input your number:‘).split()) print(x,y,z)
如何利用map()將名字首字母大寫?
def daxie(name): return name[0].upper+name[1:] def daxie2(name): return ‘%s%s‘%(name[0].upper(),name[1:]) a=[‘linghuchong‘,‘dongfangbubai‘] r=map(daxie2,a) for i in r: print(i)
--reduce
reduce同map函數一樣,也是接受兩個參數,但不同的是,reduce函數將當前數值的計算結果與下一個數值的計算結果進行累積計算。
reduce()函數第一次運行時會將可叠代對象的第一項作為第一個參數,第二項作為第二個參數傳入函數。
第二次運行則會將函數第一次運行所返回的結果作為第一個參數,可叠代對象的第三項作為第二個參數傳入函數……
即:reduce(f,[1,2,3,4])=f(f(f(1,2),3),4)
來看一個簡單的reduce函數的例子
# from functools import reduce def leijia(x,y): #註意,我們所定義的函數必須要接受兩個參數,否則會報錯 return x+y print(reduce(leijia,[1,2,3,4,5])) #結果 15 #當然也可多加默認參數 from functools import reduce def leijia(x,y,z=2): return x+y+z print(reduce(leijia,[1,2,3,4,5])) #結果: 23
--filter
同上兩個函數一樣,接受兩個參數,第一個參數為函數名,第二個參數為序列。但filter根據序列中各個元素作用與函數時,函數返回結果(True/False)來決定該元素是否保留。
來看一個篩選偶數的簡單例子:
def select(num): if num%2==0: return True else: return False r=filter(select,[1,2,3,4,5,6]) for i in r: print(i)
--sorted(list,key=None,reverse=False)
sorted顧名思義,就是排序的意思。
>>> sorted([22,33,55,11,44]) [11, 22, 33, 44, 55]
sorted還可以接受一個key函數,實現自定義排序。
1 key指定的函數將作用於list的 每一個元素 上。也就是list的 每個元素 作為參數傳入key函數
2 sorted()函數按照keys函數返回的結果進行排序,並 按照對應關系 返回list相應的元素
>>> sorted([22,33,-11,44,-55],key=abs) [-11, 22, 33, 44, -55]
來一個復雜一點的實例:
# 根據名稱排序 >>> d=[(‘linghuchong‘,‘xixingdafa‘),(‘dongfangbubai‘,‘kuihuabaodian‘),(‘zhangwuji‘,‘qiankundanuoyi‘)] >>> def by_name(a): ... return a[0] ... >>> r=sorted(d,key=by_name) >>> print(r) [(‘dongfangbubai‘, ‘kuihuabaodian‘), (‘linghuchong‘, ‘xixingdafa‘), (‘zhangwuji‘, ‘qiankundanuoyi‘)] # 根據功法排序 >>> def by_gongfa(a): ... return a[1] ... >>> r2=sorted(d,key=by_gongfa) >>> print(r2) [(‘dongfangbubai‘, ‘kuihuabaodian‘), (‘zhangwuji‘, ‘qiankundanuoyi‘), (‘linghuchong‘, ‘xixingdafa‘)]
python基礎之map/reduce/filter/sorted