#map函数
#例子1
num_1=[1,2,10,5,3,7]
ret=[]
for i in num_1:
ret.append(i**2)
print(ret) #完成一个,
#例子2
num_1=[1,2,10,5,3,7]
def map_test(array): #array,数组
ret = []
for i in num_1:
ret.append(i ** 2)
return ret
ret=map_test(num_1) #可以完成一类
print(ret)
#例子3
num_1=[1,2,10,5,3,7]
# lambda x:x+1 #和add_one函数效果是一样的
def add_one(x):
return x+1 #自增1
#lambda x:x-1 #和reduce_one函数效果是一样的
def reduce_one(x):
return x-1 #自减1
#lambda x:x**2 #和pf函数效果是一样的
def pf(x):
return x**2
def map_test(func,array):
ret=[]
for i in array:
res=func(i)
ret.append(res)
return ret
print(map_test(add_one,num_1)) #把方法和参数一起传给他
print(map_test(lambda x:x+1,num_1))
print(map_test(reduce_one,num_1))
print(map_test(lambda x:x-1,num_1))
print(map_test(pf,num_1))
print(map_test(lambda x:x**2,num_1))
res=map(lambda x:x+1,num_1) #map函数,一个是处理方法(可以是lambda,也可以是自定义的),一个是可迭代对象
print("内置函数map处理结果",res)
print(list(res))
print("自定义函数",list(map(reduce_one,num_1))) #函数式编程,运行比较简单,可读性比较差
msg='zhugeliang'
print(list(map(lambda x:x.upper(),msg)))
#filter函数
#把带sha开头的都清理出去
# 1.不用函数
movie_people=['sha_guanyu','sha_zhangfei','zhaoyun',"sha_liubei"]
ret=[]
for p in movie_people:
if not p.startswith('sha'):
ret.append(p)
print(ret)
# 2.用函数的方法
movie_people=['sha_guanyu','sha_zhangfei','zhaoyun',"sha_liubei"]
def filter_test(array):
ret = []
for p in array:
if not p.startswith('sha'):
ret.append(p)
return ret
print(filter_test(movie_people)) #filter函数
#3.如果sha在结尾,或者中间怎么样办?guanyu_sha
movie_people=['guanyu_sha','zhangfei_sha','zhaoyun',"liubei_sha"]
def sha_show(n):
return n.endswith('sha')
def filter_test(func,array):
ret = []
for p in array:
if not func(p):
ret.append(p)
return ret
res=filter_test(sha_show,movie_people)
print(res)
#4.用lambda
movie_people=['guanyu_sha','zhangfei_sha','zhaoyun',"liubei_sha"]
def filter_test(func,array):
ret = []
for p in array:
if not func(p):
ret.append(p)
return ret
res=filter_test(lambda n:n.endswith('sha'),movie_people)
print(res)
#4.用filter函数
movie_people=['guanyu_sha','zhangfei_sha','zhaoyun',"liubei_sha"]
print(filter(lambda n:n.endswith('sha'),movie_people))
print(list(filter(lambda n:n.endswith('sha'),movie_people)))
print(list(filter(lambda n:not n.endswith('sha'),movie_people)))
# reduce函数
from functools import reduce
#把列表里面的所有的数都加起来
#1.方法一
num_l=[1,2,3,4,5,6,100]
res=0
for num in num_l:
res+=num
print(res)
#2.用函数的形式
num_l=[1,2,3,4,5,6,100]
def reduce_test(array):
res=0
for num in array:
res+=num
return res
print(reduce_test(num_l))
#3.用函数的形式,算出列表里面相乘的结果
num_l=[1,2,3,100]
# def multi(x,y):
# return x*y
# lambda x,y:x*y
def reduce_test(func,array):
res=array.pop(0)
for num in array:
res=func(res,num)
return res
print(reduce_test(lambda x,y:x*y,num_l))
#4.指定初始第一个值
num_l=[1,2,3,100]
def reduce_test(func,array,init=None):
if init is None:
res=array.pop(0)
else:
res=init
for num in array:
res=func(res,num)
return res
print(reduce_test(lambda x,y:x*y,num_l,100))
#reduce函数
from functools import reduce num_l=[1,2,3,100] print(reduce(lambda x,y:x+y,num_l,1)) print(reduce(lambda x,y:x+y,num_l))
# map()
#处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样
#filter遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来
people=[
{'name':'alex','age':1000},
{'name':'wupei','age':10000},
{'name':'yuanhao','age':9000},
{'name':'linhaifeng','age':18},
]
print(list(filter(lambda p:p['age']<=18,people)))
#reduce:处理一个序列,然后把序列进行合并操作
from functools import reduce print(reduce(lambda x,y:x+y,range(100),100)) print(reduce(lambda x,y:x+y,range(1,101)))
柳志军:13418977808(手机微信),QQ:93684042
浙公网安备 33010602011771号