zoukankan      html  css  js  c++  java
  • python课堂整理15---map, filter,reduce函数

    一、map函数

    处理序列(可迭代对象)中的每一个元素,得到的结果是一个‘列表’(其实是个迭代器),该‘列表’元素个数及位置与原来一样

    理解下面这段代码:

    num_l = [1, 2, 4, 6]
    def add_one(x):
        return x + 1 #定义一个自加1的函数
    def map_test(func, array):
        ret = []
        for i in array:
            res = func(i)
            ret.append(res)
        return ret
    
    print(map_test(add_one, num_l))
    print(map_test(lambda x:x + 1, num_l))  #这样更好

    用map函数实现

    num_l = [1, 2, 4, 6]
    print(list(map(lambda x:x + 1,num_l)))  #map函数得到的是可迭代对象,需要用list方法处理一下
    

    map函数也可以传入自定义函数

    num_l = [1, 2, 4, 6]
    def add_one(x):
        return x + 1 #定义一个自加1的函数
    print(list(map(add_one,num_l)))
    

    用map函数处理字符串

    msg = "dabai"
    print(list(map(lambda x: x.upper(), msg)))
    

    二、filter函数

    filter遍历序列中的每个元素,判断每个元素得到布尔值,如果是Ture则保留下来

    理解下面代码:

    movie_people = ['sb_123', 'sb_456', 'sb_789', 'dabai']
    def filter_test(func, array):
        ret = []
        for i in movie_people:
            if not func(i):
                ret.append(i)
        return ret
    res = filter_test(lambda x: x.startswith('sb'), movie_people) #想把函数运行的结果保存下来就用变量接收,方便下面使用
    print(res)
    

    filter内也能自定义函数

    movie_people = ['sb_123', 'sb_456', 'sb_789', 'dabai']
    def sb_show(x):
        return x.startswith('sb')
    def filter_test(func, array):
        ret = []
        for i in array:
            if not func(i):
                ret.append(i)
        return ret
    res = filter_test(sb_show, movie_people) #想把函数运行的结果保存下来就用变量接收,方便下面使用
    print(res)
    

    用filter函数实现

    movie_people = ['sb_123', 'sb_456', 'sb_789', 'dabai']
    print(list(filter(lambda x: not x.startswith('sb'), movie_people)))
    

    用filter处理字典

    people = [
        {'name':'alex','age':10000},
        {'name':'dabai','age':18},
        {'name':'sb','age':90000}
    ]
    print(list(filter(lambda x: x['age'] <= 18, people)))
    

    三、reduce函数

    处理一个序列,然后把序列进行合并操作

    理解下面代码

    num_l = [1, 2, 3, 100]
    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))   #把列表里的值相乘
    

    可以设置一个默认的初始值

    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函数,要先引入functools模块

    num_l = [1, 2, 3, 100]
    from functools import reduce
    print(reduce(lambda x,y : x * y, num_l, 100))
    

    from functools import reduce
    print(reduce(lambda x,y : x + y, range(1,101)))
    

    一个奋斗中的产品小白
  • 相关阅读:
    Java言语与C言语有哪些不同
    只会增删改查的Java程序员该如何发展
    java“单根继承结构”
    Java编程领域你需要懂得技术名词解释
    HTTP相关工具类/协助类分享
    说说Java到底是值传递仍是引用传递
    Java自定义ClassLoader实现
    深化详细分析java的发展前景!
    2020Java面试题及答案,命中率高达90%
    Python爬虫详解,每个步骤都给你细致的讲解(附源码)
  • 原文地址:https://www.cnblogs.com/dabai123/p/11088575.html
Copyright © 2011-2022 走看看