python的map函数的使用方法详解以及使用案例(处理每个元素的自增、自减、平方等)
1、用我们之前学过的求一下平方(只有一个列表)
#求平方 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]
2、写成函数,这样在有多个列表的时候只要调用一下这个函数就可以了
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]
3、现在需求又变了。要求列表里面的每个数自增加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都写成了函数,这样在下面一调用函数,把列表传进去就可以了
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]
4、在添加一个求平方的函数
这样子看起来很灵活了,还不够好
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]
5、在上面的基础上,在进行精简,刚刚学了匿名函数,现在我们就可以用上了
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]
6、我们来看下map函数的用法,打印出来的是一个内存地址
#我们看下系统内置函数map print (map(lambda x:x+1,num)) C:\python35\python3.exe D:/pyproject/day14函数/map函数.py <map object at 0x0000000000A14128>
map处理的一个结果是一个迭代器,只能迭代一次
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]
7、总结map函数的用法,需要传2个参数,在python内部,就相当于一个for循环,把每次遍历的那个数字交给这个处理方法
map(一个处理方法,一个可迭代对象)
8、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]
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)))
10、将列表里面的元素变成字符串的类型
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总结:
处理序列中的每个元素,得到的结果是一个“列表”(迭代器),该“列表”个数已位置与原来一样,然后把每个元素依次交给前面的这个处理方法,最后得到一个列表的结果