1.map
map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的迭代器。
语法:
map(function, iterable)
例子:
def double(num):
return 2*num
l=list(range(5))
print(l)
it=map(double,l)#map的返回值it是一个迭代器
print(it)
dou_l=list(it)
print(dou_l)#列表中的所有元素都做了double函数的操作
运行结果:
2.filter
filter() 会根据提供的函数对指定序列做筛选。第一个函数用来判断序列内的元素是否符合某种规定,返回符合function函数规定元素的迭代器。
语法:
filter(function, iterable)
例子:
def odd(num):
return num%2
print(l)
it2=filter(odd,l)#odd的返回值是一个迭代器
print(it2)
odd_l=list(it2)#转换成列表类型打印
print(odd_l)
运行结果:
map和filter可以组合使用
例子:
it3=map(double,filter(odd,l))#对filter过滤后的序列进行double操作
dou_odd_l=list(it3)
print(dou_odd_l)
运行结果:
总结:map和filter的功能更多的被列表推导所代替了。
def fact(n):
return 1 if n < 2 else n* fact(n-1)
l1=list(map(fact,range(6)))#构建0!到5!的一个阶乘列表
print(l1)
l2=[fact(n) for n in range(6)]#使用列表推导构建阶乘列表
print(l2)
l3=list(map(fact,filter(lambda n:n%2,range(6))))#使用map和filter计算直到5!的奇数阶乘列表
print(l3)
l4=[fact(n) for n in range(6) if n%2]#使用列表推导,避免了lambda函数的使用
print(l4)
运行结果: