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