咔叽游戏

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 375|回复: 0

[python] Python filter()及reduce()函数使用方法解析

[复制链接]
  • TA的每日心情
    无聊
    2019-6-2 14:11
  • 签到天数: 4 天

    [LV.2]圆转纯熟

    发表于 2020-10-4 11:39:49 | 显示全部楼层 |阅读模式
    一、filter() 
    在Python内建函数中,有一个和map()函数用法类似、却可以用来过滤元素的迭代函数,这个函数就是filter()。它的函数原型是:filter(function,itearable)
    filter返回的是一个filter对象,可以通过list()或者for循环取出内容。 注意:传入的函数返回值必须是布尔类型。若是真则保留元素,假则过滤掉这元素
    1. def is_even(x):
    2.   return x%2==0
    3. a=filter(is_even,[1,2,3,4,5,6])
    4. print(a)
    5. #<filter object at 0x017FCF30>
    6. print(list(a))
    7. #[2, 4, 6]
    复制代码
    下面在举个例子,体会一下发filter()的的用法。
    1. #过滤列表中的元素
    2. def is_empty(s):
    3.   return s.strip()!=''
    4. print(list(filter(is_empty,['','\n','\t','aa']))) #['aa']
    复制代码
    二、reduce()
    reduce()函数原型是reduce(function,sequence),它的作用是用function对序列进行累积操作。它返回值可以直接输出,不像map和filter返回的是一个迭代对象,还得去转化。
    所谓的累计操作就是就是第 1、2 个元素用 function 函数运算,得到的结果再与第三个数据用 function 函数运算,然后得到的结果再与第四个进行运算,一次类推。
    下面通过一个具体的例子来说明所谓的累计操作是怎么样的。
    注:reduce函数是存放再functiontools模块中的,使用前要导入
    1. #函数功能是实现阶乘
    2. from functools import reduce #导入reduce
    3. print(reduce(lambda x,y:x*y,[1,2,3,4])
    4. #输出是24
    复制代码
    整个过程如下:

    1、操作第1,2个元素,即1 * 2 得到2

    2、操作1的结果和第3个元素,即 2 * 3 得到6

    3、操做2的结果和第4个元素,即 6 * 4 得到24

    4、返回24
    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持咔叽论坛。

    原文地址:https://www.jb51.net/article/194957.htm

    QQ|免责声明|小黑屋|手机版|Archiver|咔叽游戏

    GMT+8, 2024-3-28 20:25

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表