Python高阶函数: map reduce filter

———————— map ——————

map 是内置函数,不需要导入模块
map(func,iterable)
参数1; 是每个元素需要执行的函数, 注意: 传入的是函数名
该函数必须要传入一个参数, 该函数必须有返回值
参数2: 是一个可迭代对象 (存放多个数据的集合)
作用: 将参数1的函数依次作用在可迭代对象的每一个元素上,会将每个结果封装成一个可迭代对象,并返回

# 例:  [1,2,3]  --- > ["1","2","3"]
# for循环 1  ---> "1"   执行 str
dataList = [1,2,3]
# 注意:结果是一个map
res = map(str,dataList)
print(res)
# print(type(res))
# 可以将map直接转换成list
print(list(res))

#自定义map函数
def myMap(func,listData):
    listRes = []
#     #获取每一条数据依次执行函数
    for data in listData:
        res = func(data)
        listRes.append(res)
    return listRes
dataList = [1,2,3]
listRes = myMap(str,dataList)
print(listRes)

# ["1","2","3"]  --> [1,2,3]
listData = ["1","2","3","4","5"]
res = map(int,listData) 
# print(list(res))

————————reduce——————

reduce 不是内置函数, 需要导入 from functools import reduce
reduce(func,squ)
参数1: 函数, 用来将两个数进行整合
参数2: 是一个包含多个数据的集合

作用: 一个函数作用在序列上,这个函数必须接收2个参数,reduce把结果继续和序列的下一个元素累计运算
例: 1 + 2 + 3 +4 +5 ………100 求和
1.循环
2.递归 sum(100) = sum(99) + 100
3.高阶函数: 1 + 2 a + b
原理: res = f(f(f(a,b),c),d)

from  functools import  reduce
# 实现:  1 + 2 + 3 +4 +5 .........100  ---> a + b
def add(a,b):
    return  a + b
listData = list(range(1,101))
res = reduce(add,listData)
# print(res)

————————混用——————

# 任务:  "56589"  ----> 56589  
# 思路:  "56589"  --- "5","6","5","8","9" ---> 5,6,5,8,9 ---->  56589
#     解决              list                    map(,)           reduce()

from  functools import  reduce
def strStr(strData):
    listStr = list(strData)
    def func1(a,b):
        return  a*10 + b
    return  reduce(func1,map(int,listStr))
strData = "562312"
res = strStr(strData)
# print(res)
# print(type(res))

————————filter——————

filter 过滤器 内置函数
filter(func,iterable)
参数1 :函数,用来决定元素是否保留
参数2: 迭代器
作用: 将函数依次作用在迭代器的每一个元素上, 函数会根据该元素的执行结果来决定元素 是(True保留)否(False移除) 保留

# 踢出序列中的奇数...
listData = list(range(1,101))
# print(listData)
def isEven(number):
    if number%2 == 0: #偶数,则保留,%取余数,余数等于零,是为偶数
        return True
    return False
res = filter(isEven,listData)
print(res)   #是一个过滤器
print(type(res))
print(list(res))

猜你喜欢

转载自blog.csdn.net/weixin_42367527/article/details/82699737