一、用咱們以前學過的求一下平方(只有一個列表)python
#求平方 num=[1,5,6,2,7,8] a=[] for n in num: a.append(n**2) print (a) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [1, 25, 36, 4, 49, 64]
二、寫成函數,這樣在有多個列表的時候只要調用一下這個函數就能夠了app
num=[1,5,6,2,7,8] num_1=[22,333,11,55,66] def map_atest(array): ret = [] for n in array: ret.append(n**2) return ret ret=map_atest(num) ret1=map_atest(num_1) print (ret) print(ret1) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [1, 25, 36, 4, 49, 64] [484, 110889, 121, 3025, 4356]
三、如今需求又變了。要求列表裏面的每一個數自增長1函數
num=[1,5,6,2,7,8] num_1=[22,333,11,55,66] def add_one(x):#1.定義一個自增1的函數 return x+1 def add_reduce_one(x):#2.定義一個自減1的函數 return x-1 def map_atest(func,array):#3.定義一個函數,須要穿2個參數 ret = []#4.1定義一個空列表 for n in array:#這個array是num傳進來的列表,作for循環 res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增長了1 add_one(n),而後賦值給變量 ret.append(res) return ret print(map_atest(add_one,num))#4. 傳2個參數add_one num 這2個都是函數 print(map_atest(add_one,num_1)) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [2, 6, 7, 3, 8, 9] [23, 334, 12, 56, 67]
咱們把自增1和自減1都寫成了函數,這樣在下面一調用函數,把列表傳進去就能夠了spa
num=[1,5,6,2,7,8] num_1=[22,333,11,55,66] def add_one(x):#1.定義一個自增1的函數 return x+1 def add_reduce_one(x):#2.定義一個自減1的函數 return x-1 def map_atest(func,array):#3.定義一個函數,須要穿2個參數 ret = []#4.1定義一個空列表 for n in array:#這個array是num傳進來的列表,作for循環 res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增長了1 add_one(n),而後賦值給變量 ret.append(res) return ret print(map_atest(add_reduce_one,num))#4. 傳2個參數add_reduceone num 這2個都是函數 print(map_atest(add_reduce_one,num_1)) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [0, 4, 5, 1, 6, 7] [21, 332, 10, 54, 65]
四、在添加一個求平方的函數code
這樣子看起來很靈活了,還不夠好對象
num=[1,5,6,2,7,8] num_1=[22,333,11,55,66] def add_one(x):#1.定義一個自增1的函數 return x+1 def reduce_one(x):#2.定義一個自減1的函數 return x-1 def pf_one(x): return x**2 def map_atest(func,array):#3.定義一個函數,須要穿2個參數 ret = []#4.1定義一個空列表 for n in array:#這個array是num傳進來的列表,作for循環 res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增長了1 add_one(n),而後賦值給變量 ret.append(res) return ret print(map_atest(add_one,num))#4. 傳2個參數add_one num 這2個都是函數 print(map_atest(reduce_one,num_1)) print(map_atest(pf_one,num_1)) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [2, 6, 7, 3, 8, 9] [21, 332, 10, 54, 65] [484, 110889, 121, 3025, 4356]
五、在上面的基礎上,在進行精簡,剛剛學了匿名函數,如今咱們就能夠用上了blog
def add_one(x):#1.定義一個自增1的函數 return x+1 這個函數就等於 lambda x:x+1 def add_reduce_one(x):#2.定義一個自減1的函數 return x-1 這個函數等於 lambda x:x-1 def pf_one(x): return x**2 這個函數等於 lambda x:x**2
而後最後精簡完成就是下面這樣了,用了3個lambda代替了3個函數。代碼更少了內存
num=[1,5,6,2,7,8] num_1=[22,333,11,55,66] def map_atest(func,array):#3.定義一個函數,須要穿2個參數 ret = []#4.1定義一個空列表 for n in array:#這個array是num傳進來的列表,作for循環 res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增長了1 add_one(n),而後賦值給變量 ret.append(res) return ret print(map_atest(lambda x:x+1,num))#4. 傳2個參數add_one num 這2個都是函數 print(map_atest(lambda x:x-1,num_1)) print(map_atest(lambda x:x**2,num_1)) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [2, 6, 7, 3, 8, 9] [21, 332, 10, 54, 65] [484, 110889, 121, 3025, 4356]
六、咱們來看下map函數的用法,打印出來的是一個內存地址字符串
#咱們看下系統內置函數map print (map(lambda x:x+1,num)) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py <map object at 0x0000000000A14128>
map處理的一個結果是一個迭代器,只能迭代一次for循環
rec=map(lambda x:x+1,num) for n in (rec): print (n) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [2, 6, 7, 3, 8, 9] 2 6 7 3 8 9
rec=map(lambda x:x+1,num) # for n in (rec): # print (n) print (list(rec)) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [2, 6, 7, 3, 8, 9] [2, 6, 7, 3, 8, 9]
七、總結map函數的用法,須要傳2個參數,在python內部,就至關於一個for循環,把每次遍歷的那個數字交給這個處理方法
map(一個處理方法,一個可迭代對象)
八、map後面不必定用lambda,只用自定義函數也能夠的
num=[1,5,6,2,7,8] def add_one(x):#1.定義一個自增1的函數 return x+1 print (list(map(add_one,num))) C:\python35\python3.exe D:/pyproject/day14函數/map函數.py [2, 6, 7, 3, 8, 9]
九、map函數處理字符串,把字符串都變成大寫
msg="gouguqoi" list(map(lambda x:x.upper(),msg))
上面的代碼是這樣造成的
第一步 msg="gouguqoi" map(lambda x:x.upper(),msg) 第二步 msg="gouguqoi" list(map(lambda x:x.upper(),msg)) 第三步 msg="gouguqoi" print (list(map(lambda x:x.upper(),msg)))
十、將列表裏面的元素變成字符串的類型
num=[1,5,6,2,7,8] print(list(map(lambda x:str(x),num))) print(list(map(str,num))) ['1', '5', '6', '2', '7', '8'] ['1', '5', '6', '2', '7', '8']
map總結:
處理序列中的每一個元素,獲得的結果是一個「列表」(迭代器),該「列表」個數已位置與原來同樣,而後把每一個元素依次交給前面的這個處理方法,最後獲得一個列表的結果