1. 程式人生 > >Python:高階函式map與reduce以及filter和sorted的使用

Python:高階函式map與reduce以及filter和sorted的使用

#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)