Python3 map函式與reduce函式
阿新 • • 發佈:2019-02-02
# -*- coding:utf-8 -*- # 傳入一個數字,返回這個數字的平方 def calc(x): s = x * x return s list1 = [1,2,3,4,5,6,7,8,9,10] result_list = [] # for 迴圈遍歷列表中的每一個元素。讓列表中每一個元素都執行一次calc函式 for number in list1: # 傳入一個數字,得到返回的結果 s = calc(number) # 把計算的結果s新增到空列表中 result_list.append(s) print(result_list) # map(func,iter)作用:讓列表中每一個元素都去執行一次calc函式 # 在python2版本中,map返回的是一個結果列表,所有執行函式返回的結果都會放在列表中 # 在python3版本中,map返回的是一個生成器物件,生成器物件可以同next獲取其中的內容,可以將生成器物件轉換為列表 m = map(calc, list1) # 轉換為列表 m = list(m) print(m) # 去除列表中的字串中的特殊字元 list2 = [' 張\n','張三\n李四\n',' 王 五\n','結\t果','\t內\n容'] def strip_some(string): # 去除\n string = string.strip('\n') # 去除空格string = string.strip() # 替換\n string = string.replace('\n','') # 替換\t string = string.replace('\t','') # 替換空格 string = string.replace(' ','') # 返回處理後的字串 return string # 使用map()函式,讓列表中的每一個字串都執行一次strip_some()函式 result = map(strip_some, list2) # 轉換為list result = list(result) print(result) # python3中預設沒有引入該函式,手動引入 from functools import reduce # 可以在python2環境中執行測試效果 # reduce()函式:要執行的函式接收兩個引數,兩個元素會進行一次運算,並且將運算的結果和第三個元素再次運算。。以此類推....... list3 = [1,2,3,4,5,6,7,8,9,10] def add(x, y): rs = x + y return rs # reduce(func,iter) rs = reduce(add, list3) print(rs) list3 = [0,1,2,3,4,5,6,7,8,9,10] def test(x): if x % 2 == 0: return x # 使用map執行test函式,會將所有的返回結果都放在結果列表中 m = list(map(test, list3)) print(m) # 會將返回的結果進行篩選,只會取出條件為真或不為None的元素 # filter 讓列表中的每一個元素都執行一次函式,如果執行函式返回的結果為真或不為None,把結果放入結果列表中,否則就不要了 m = list(filter(test, list3)) print(m) ''' 1.map()函式,會讓列表中每一個元素都執行一某個函式(傳遞1個引數),並且將執行函式返回的結果(無論是什麼樣的結果)放在結果列表中 2.filter()函式,回讓列表中的每一個元素都執行一次某個函式(傳遞1個引數),並且將執行函式返回為真或不為None的結果放在結果列表中 3.reduce()函式,會將列表中的每兩個元素執行一次函式(傳遞2個引數),並且可以將前兩個元素計算的結果拿過來,繼續和列表中的第三個元素計算,計算完成後繼續和第四個計算.....,最後返回的就是計算後的結果''' list4 = ['hello','world','nihao','shijie'] def add_s(x, y): s = x + '*' + y return s # 利用reduce函式,將列表中字串拼接起來 rs = reduce(add_s, list4) print(rs)