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()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同

posted @ 2023-01-09 22:57  小杨的冥想课  阅读(45)  评论(0编辑  收藏  举报