1. 程式人生 > >python基礎之map/reduce/filter/sorted

python基礎之map/reduce/filter/sorted

排序。 strong func iterable 例子 決定 tools sort .com

---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