Python:高階函式map與reduce以及filter和sorted的使用
阿新 • • 發佈:2018-11-17
#map and reduce 是進行分散式處理的python 高階函式
map () :將叢集的資料進行解析
reduce() 將解析後的資料集合
filter() 用於過濾序列傳入的函式作用於序列的每個元素返回True or False
#map(args1,args2) args1 :Function ,args2 :list
接收一個list和一個函式,把list中的每一個元素作用與Function,通過list接收
將函式作用在列表中的每一個元素,把結果作為一個可以迭代的物件返回
示例1:
題目:將整數元素的序列轉為字元型 l = map(str,[1,2,3,4]) print(list(l))
示例2:
def CharToInt(chr) :
return {"0":0,"1":1,"2":2}[chr] #將單個字元轉為對應的字面量整數
listStr={"0","1","2"}
val = map(CharToInt,listStr) #結果放在序列中
print(val) #返回值為惰性列表
print(list(val)) #返回值為一個列表
示例3:
import math def Conculate(x,y,Func) : return Func(x)+Func(y) var = Conculate(25,9,math.sqrt) print(var)
#reduce(args1,args2) args1 :Function args 2:list 返回值為一個結果
#Function(args1,args2),Function必須接收兩個引數
#將資料處理的內容歸總,Func必須接受兩個引數,把結果和序列的下一個元素累計計算
from functools import reduce #使用reduce()匯入functools包
例項1:
#對列表內的元素求和 list = [1,2,3,4,5] def Sum(x,y) return x+y var = reduce(Sum,list) print(var)
示例2:
#將字串轉化為對應字元量
def Str(str) :
def Func (x,y) :
return x * 10 +y
def FuncTwo(chr) :
return {"0": 0, "1": 1, "2": 2}[chr]
return reduce(Func,map(FuncTwo,list(str)))
a = Str("12")
print(a)
#filter(args1,args2) args1:Function ,args2 :list
#Function對list中的每個元素進行判斷和過濾,返回bool值,通過list接收
例項:
需求:過濾傳入序列中的偶數
list1 = [1,2,3,4,5,6]
def func(num) :
if num % 2 == 0 :
return True
return False
val = filter(func,list1) #如果為True則將值傳給val
print(list(val))
例項:
需求:過濾列表中的字串“無”
listStr =[["姓名","年齡","愛好"],["Tom","25","無"],["Hanmei","26","Money"]]
def Func(Str) :
if str(Str) =="無":
return False
return True
for line in listStr : #遍歷列表中的元素
m = filter(Func,line)
print(list(m))
示例3:
#過濾列表中的空字串
def Funct(x) :
return x and len(x.strip()) > 0
val = filter(Funct,["Herry","","Hani","Gerry"])
print(list(val))
#示例4
過濾1~100中平方根為整數
def Functions(x) :
if int(math.sqrt(x)) == math.sqrt(x) :
return x
val = filter(Functions,range(1,101))
print(list(val))
#sorted()排序: 該排序預設為升序排列
sorted(lsd,key) :key接受函式定義的排序方法
例項:
需求:對 Data = [4,7,-2,-6,3]中的元素按照絕對值大小排序
val = sorted(Data,key = abs)
print(val)
需求2:對Data進行降序排列
val = sorted(Data,reverse= True) #如果reseve = True 進行降序排列
print(val)
需求3:通過傳入的函式修改排序的條件
#按照字串長短來排
DataList = ["a00000001","c000","f0005","v008"]
def myline(str) :
return len(str)
val = sorted(DataList,myline)
print(val)