python的reduce函數的使用方法詳解以及使用案例,相加,相乘(處理一個序列,然后把序列進程合並操作)


1、求列表的數字相加之和,還是之前的習慣,寫for循環來實現

num_1=[1,2,3,4,5,6,7,8,9]
a=0
for n in num_1:
    #a=a+n
    a+=n
print (a)

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

45

2、優化一下改成函數形式

num_1=[1,2,3,4,5,6,7,8,9]#定義一個列表
def reduce_atest(array):#定義一個函數,需要傳一個參數array
    a=0
    for n in array:
        a+=n
    return a#函數的返回值為這些數字相加的結果
print(reduce_atest(num_1))#把這個列表當成是函數的參數傳給array

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

45

3、專門定義函數用來做相乘運算

num_1=[1,2,3,4,5,6,7,8,9]
def xiangcheng(x,y):
    return x*y
def reduce_atest(func,array):
    a=1
    for n in array:#開始循環array這個列表,也就是num里面的數字
        a=func(a,n)#func就是xiangcheng這個函數,需要傳2個參數,a是初始的1,n是迭代的數字
    return a
print(reduce_atest(xiangcheng,num_1))#傳2個參數 一個是處理方式,一個是可迭代的對象,傳給了func和array

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

362880

4、在繼續優化,把自定義函數換成lambda

num_1=[1,2,3,4,5,6,7,8,9]
def reduce_atest(func,array):
    a=1
    for n in array:#開始循環array這個列表,也就是num里面的數字
        a=func(a,n)#func就是xiangcheng這個函數,需要傳2個參數,a是初始的1,n是迭代的數字
    return a
print(reduce_atest(lambda x,y:x*y,num_1))#傳2個參數 一個是處理方式,一個是可迭代的對象,傳給了func和array

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

362880
#lambda x,y:x*y,()   等價於下面2行,之前的map filter用了好多次了
# def xiangcheng(x,y):
#     return x*y

5、由於函數里面的a=1這個是寫死了的,這樣是太好的,因為是列表里面的數字相乘,我們可以在第一步就把第一個數字拿出來,在循環的時候在相乘

num_1=[1,2,3,4,5,6,7,8,9]
def reduce_atest(func,array):
    a=array.pop(0)#第一步這時候a等於列表里面取出來的第一個數字
    for n in array:#開始循環array這個列表,從第二個數字開始了
        a=func(a,n)#func就是xiangcheng這個函數,需要傳2個參數,a是初始的1,n是迭代的數字
    return a
print(reduce_atest(lambda x,y:x*y,num_1))#傳2個參數 一個是處理方式,一個是可迭代的對象,傳給了func和array

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

362880

6、在修改下增加一個功能,增加一個用戶可以指定什么數字開頭作為一個基數,這個基數乘以列表里面的數字,比方說10*[1,2,3,4,5,6,7,8,9]   22*[1,2,3,4,5,6,7,8,9]

思路就是增加一個函數的默認參數,如果用戶不傳,就沒有這個默認參數,如果傳了,就以這個數字作為基數,再乘以列表里面的數字

num_1=[1,2,3,4,5,6,7,8,9]
def reduce_atest(func,array,init=None):
    if init == None:
        a=array.pop(0)
    else:
        a=init
    for n in array:
        a=func(a,n)
    return a
print(reduce_atest(lambda x,y:x*y,num_1,2))

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

725760

7、reduce函數

map把所有的元素在原有的基礎之上處理一下(每個元素自增1  自檢1)

filter遍歷序列中的每個元素,判斷每個元素得到布爾值,如果True則留下來(判斷看電影的人是不是sb,說話的就是sb(判斷字符串是否以sb開頭,sb結尾))

reduce可以把列表中的整體的數據合並到一處,得到一個結果

reduce 處理一個序列,然后把序列進程合並操作

reduce的使用,在使用之前得先導入模塊,在python2.7中可以直接使用

from functools import reduce
num_1=[1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x*y,num_1))

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

362880

reduce也可以加基數

from functools import reduce
num_1=[1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x*y,num_1,10))

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

3628800

8、把列表里面的所有元素相加

from functools import reduce
num=[1,5,6,2,7,8]
print((reduce(lambda x,y:x+y,num)))

C:\python35\python3.exe D:/pyproject/day14函數/reduce函數.py

29


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM