python基礎-map函式
阿新 • • 發佈:2020-11-24
map-直接翻譯為:地圖,對映,...與...的關係。
這個函式會根據提供的函式對指定序列做對映。
先看需求,有一個list,需要對每個元素進行修改,加減乘除等,如何處理?肯定會用for迴圈
num_l=[1,3,6,4,9] num_empty1=[] num_empty2=[] #加1 for i in num_l: i+=1 num_empty1.append(i) print(num_empty1) #平方 for i in num_l: i=i**2 num_empty2.append(i) print(num_empty2)
現在需要對程式碼進行優化,把需求寫到函式裡邊,使用時直接呼叫函式
num_l=[1,3,6,4,9] num_empty1=[] num_empty2=[] #加1 def add_one(array):#引數是個列表 for i in array: i+=1 num_empty1.append(i) print(num_empty1) #平方 def pf(array):#引數是個列表 for i in array: i=i**2 num_empty2.append(i) print(num_empty2) add_one(num_l) #呼叫函式 pf(num_l) #呼叫函式
現在還需要對程式碼進行優化,把呼叫的函式寫成另一個函式的引數
num_l=[1,3,6,4,9] def map_test(func,array): num_empty1 = [] for i in num_l: res=func(i) #函式自動傳參 num_empty1.append(res) return num_empty1 def add_one(i): i+=1 return i def pf(i): i=i**2 return i res1=map_test(add_one,num_l) #map_test(函式,列表),由於在函式map_test內部func自動傳參,因此此處不用在傳參 res2=map_test(pf,num_l) res3=map_test(lambda x:x+1,num_l) #此處使用lambda函式來代替函式 res4=map_test(lambda x:x**2,num_l) print(res1) print(res2) print(res3) print(res4)
至此,其實完成的就是一個map函式,對某個可迭代物件,使用指定的某個函式對元素使用for迴圈進行操作。
map函式格式 :map(func,interable)。返回值是一個迭代器的記憶體地址,顯示需要使用list()
list_a=[1,2,6,8] res=map(lambda x:x**3,list_a) print(res) print(list(res))
def pf(i): i=i**2 return i list_a=[1,2,6,8] res=map(pf,list_a)#使用for迴圈遍歷list_a,所以func不傳參 print(res) print(list(res))