標籤:
這一節,我們將主要學慣用於list的三個內建函數: filter(), map(), 和 reduce().
1.filter(function, sequence) 逐個從sequence中取一個元素,傳入function,返回一個使function為真的序列。 如果參數sequence是str、unicode或者tuple,則返回相同的類型,否則都返回一個list
參數function:只有一個參數的函數,如果function為None,filter()將返回整個sequence。
參數sequence:一個序列(字串、元組、列表等)
def testFilter(x): return x%2 #x是否能被2整除print filter(testFilter,range(1,10)) #返回不能被2整除的序列print filter(None,range(1,10)) #返回整個range(1,10)序列
運行結果:
>>> [1, 3, 5, 7, 9][1, 2, 3, 4, 5, 6, 7, 8, 9]
2.map(function, sequence) 逐個從sequence中取一個元素傳入function,function的每個傳回值組成列表作為map函數的傳回值
參數function:可以有一個參數,或者多個參數,如果有多個參數,對應的map函數的sequence參數也應該有多個,並且每個sequence的元素個數相同
參數sequence:一個序列(字串、元組、列表等)
def testMap(x,y): return x+y print map(testMap,range(1,5),range(1,5))print map(testMap,range(1,5),range(1,3))
運行結果:
>>> [2, 4, 6, 8]Traceback (most recent call last): File "C:/Users/PC/Desktop/pythonstudy/testfff.py", line 11, in <module> print map(testMap,range(1,5),range(1,3)) File "C:/Users/PC/Desktop/pythonstudy/testfff.py", line 9, in testMap return x+yTypeError: unsupported operand type(s) for +: ‘int‘ and ‘NoneType‘
3.reduce(function, sequence) 取sequnce的第一個元素和第二個元素作為初始值傳入function,計算後function的傳回值和sequnce的下一個元素作為參數傳入function進行計算,直到sequence的所有元素計算完成,將最後得到的值作為reduce的傳回值
function:兩個參數的函數
sequence:一個序列(字串、元組、列表等)
註:reduce函數還可以有第三個參數,用來初始化第一個用於計算的值
如果sequence只有一個元素,那麼reduce將直接返回該值,如果sequence為空白,則會引起一個錯誤
def testReduce(x,y): return x+yprint reduce(testReduce,range(10)) #列印range(10)的所有元素相加的值,計算過程:0+1+2+..+9print reduce(testReduce,range(10),10)#列印10和range(10) 所有元素相加的值,計算過程:10+0+1+2+...+9
運行結果:
>>> 4555
Python學習筆記 (第6課)