python中的几个特殊的高阶函数(map();filter();reduce(); enumerate();zip())
python中的几个特殊的高阶函数(map();filter();reduce(); enumerate();zip())
map函数
- map函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素,并把结果作为新的Iterable返回,基本规则 map(function,iterable...), function---函数名, iterable---一个或多个序列
#1.基本函数与map函数连用
def func(x):
return x*x
a = [1,2,3,4,5]
b = map(func,a)
print(list(b))
#输出结果 [1, 4, 9, 16, 25]
#2.基本函数与lambda函数连用
a = map(lambda x:x*x,[1,2,3,4])
print(list(a))
#3.也可以与自带的内部函数
import math
a = [1,2,3,4,5]
r = map(math.sqrt,a)
print(list(r))
filter函数
- filter函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
- filter主要用来做筛选运算
# filter函数与map函数类似
#1.基本函数与map函数连用
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4, 5])
print(list(newlist))
#输出结果[1, 3, 5]
#与lambad函数连用
newlist = filter(lambda x:x % 2 == 1, [1, 2, 3, 4, 5])
print(list(newlist))
#思考,如果将filter函数换成map函数,其输出的结果是True与Flase,并不是结果
reduce函数
- reduce有三个参数,第一个是函数function,第二个是序列sequence,第三个是initial,为初始值,默认为None。reduce(func,lst),其中func必须至少有两个参数。每次func计算的结果继续和序列的下⼀个元素做累积计算
- reduce函数主要用来做迭代运算
#普通用法
def f(x, y):
return x + y
a = reduce(f, [1, 3, 5, 7, 9])
print(a)
'''
调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:
先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
'''
#reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100
def f(x, y):
return x + y
a = reduce(f, [1, 3, 5, 7, 9,],100)
print(a)
'''
结果将变为125,因为第一轮计算是:
计算初始值和第一个元素:f(100, 1),结果为101。
'''
enumerate函数
-
enumerate的用法多用于在for循环中得到计数**
-
enumerate参数为可遍历的变量,如 字符串,列表等; 返回值为enumerate类
enumerate(iterable, start=0)#star可以更改起始的位置 # 反转字符串 name = "小黑半夜三点在被窝玩愤怒的小鸟" lenbook = len(name) -1 result = '' for index,value in enumerate(name): #enumerate可以返回两个值 index:0 1 2 3 4..... value为相对应的值 result = result + name[lenbook-i] print(result) #示例2 colors = ["red", "yellow", "green", "black"] for i,j in enumerate(colors,start=1): print(i,j) ''' 输出结果 1 red 2 yellow 3 green 4 black '''
zip函数
- zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
colors = ["red", "yellow", "green", "black"]
fruits = ["apple", "pineapple", "grapes", "cherry"]
for item in zip(colors,fruits):
print(item)
"""
输出结果:
('red', 'apple')
('yellow', 'pineapple')
('green', 'grapes')
('black', 'cherry')
"""
# 当我们使用zip()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
记录学习的点点滴滴