Python学习之魔法函数(filter,map,reduce)详解

作者:渴望力量的哈士奇 时间:2023-03-25 05:32:21 

今天的这一章节我们来学习一下,Python 中的三个高级函数,也被称之为 魔法函数。之所以把他们交的这么高级,主要是因为它们返回的数据类型多数是 迭代器。

我们在上一章节有介绍过,迭代器 可以提升我们的代码的执行效率、降低内存消耗。所以接下来我们就认识一下这些 魔法函数。

filter() 函数

filter() 函数 是python的一个内置函数。

filter() 函数的功能:可以将一个可遍历的对象根据过滤条件,生成一个迭代器。(在python2.7版本,返回的是列表)

filter() 函数的使用方法:

用法:

filter(function, list)

参数介绍:

function:对list的每个item进行条件过滤的定义(主要对第二参数的每个成员进行判断,满足函数的要求,将会进入 filter 生成的迭代器)

list:需要过滤的列表 (其实这里不一定只可以放列表,放入的是可迭代对象)

演示案例如下(过滤出列表中的所有偶数):

def is_even(n):
   return n % 2 == 0

newlist = filter(is_even, [1, 2, 3, 4, 5, 6])
print(newlist, type(newlist))

# >>> 执行结果如下:
# >>> <filter object at 0x7fb241492310> <class 'filter'>

for i in newlist:
   print(i)

# >>> 执行结果如下:
# >>> 2
# >>> 4
# >>> 6

Python学习之魔法函数(filter,map,reduce)详解

PS:需要注意的是,这里的非偶数,虽然会被过滤函数抛弃,但是依然会存在于之前的列表中。

map() 函数

map() 函数 是python的一个内置函数。

map() 函数的功能:对列表中的每一个成员依次执行函数进行判断,将执行的结果放到新 list 中,返回一个 map 对应的对象。

map() 函数的使用方法:

用法:

map(function, list)

参数介绍:

function:对 list 每个 item 进行条件满足的判断

list:需要过滤的列表 (其实这里不一定只可以放列表,放入的是可迭代对象)

演示案例如下(对列表中的每一个成员判断是否大于1):

result = map(lambda x: x>1, [0, 1, 2, 3])

print(result, type(result))

# >>> 执行结果如下:
# >>> <map object at 0x7facfa399e80> <class 'map'>

for i in result:
   print(i)

# >>> 执行结果如下:
# >>> False
# >>> False
# >>> True
# >>> True

Python学习之魔法函数(filter,map,reduce)详解

reduce() 函数

reduce() 函数 以前是python的一个内置函数,现在不是了。(在python 2.x版本的时候,reduce() 函数可以直接被调用;但是在 python 3.x 的版本中,由于返回的不是一个迭代器,所以需要先执行导入然后才可以继续使用。导入语句 from functools import reduce)

reduce() 函数 的功能:对循环前后的两个数据进行累加或者累乘。(实际上可以通过 lambda 对这两个成员进行任何的处理)

reduce() 函数的使用方法:

用法:

reduce(function, list)

参数介绍:

function:对数据累加/累成的函数

list:需要过滤的列表 (其实这里不一定只可以放列表,放入的是可迭代对象)

演示案例如下(对循环前后的两个数据进行累加或者累乘):

from functools import reduce

result = reduce(lambda x, y: x + y, [1, 2, 3])

print(result, '---', type(result))

# >>> 执行结果如下:
# >>> 6 --- <class 'int'>

from functools import reduce

result = reduce(lambda x, y: x * y, [1, 3, 5])

print(result, '---', type(result))

# >>> 执行结果如下:
# >>> 15 --- <class 'int'>

filter() 函数 小实战

scores = [("张三", 89, 90, 59),
         ("李四", 99, 49, 59),
         ("赵五", 99, 60, 20),
         ("王二麻子", 40, 94, 59),
         ("李雷", 89, 90, 59),
         ("李莉", 89, 90, 69),
         ("楚浠", 79, 90, 59),
         ("Neo", 85, 90, 59),
         ("Abby", 89, 91, 90)]

def handle_filter(a):
   s = sorted(a[1:])   # 对三科成绩进行排序

# 有 2 科成绩在 80 分以上,并且有 1 科在 60 分以下的
   if s[-2] > 80 and s[0] < 60:
       return True

# 有 1 科成绩在 90 分以上,另外 2 科成绩都在 60 分以下
   if s[-1] > 90 and s[1] < 60:
       return True
   if s[-2] > 80 and sum(s)/len(s) < 60:

# 有 1 科成绩在 90 分以上, 且 3 科的平均分在 70 分以下
       return True
   return False

newIter = list(filter(handle_filter, scores))
print(newIter)

# >>> 执行结果如下:
# >>> [('张三', 89, 90, 59), ('李四', 99, 49, 59), ('王二麻子', 40, 94, 59), ('李雷', 89, 90, 59), ('Neo', 85, 90, 59)]

来源:https://blog.csdn.net/weixin_42250835/article/details/123911713

标签:Python,filter(),map(),reduce()
0
投稿

猜你喜欢

  • Python中if语句的使用方法及实例代码

    2022-03-24 07:17:04
  • python切片的步进、添加、连接简单操作示例

    2022-09-10 01:26:34
  • pytorch中图像的数据格式实例

    2021-02-16 06:22:19
  • Node.js 和 Python之间该选择哪个?

    2021-05-27 21:38:15
  • 使用python模块plotdigitizer抠取论文图片中的数据实例详解

    2023-07-14 01:50:52
  • oracle误删数据表还原的二种方法(oracle还原)

    2024-01-14 21:33:55
  • 基于存储过程的详细介绍

    2024-01-21 06:29:19
  • Python语法概念基础详解

    2023-07-07 01:36:24
  • 浅谈python数据类型及类型转换

    2023-08-28 15:25:32
  • Oracle 数据库导出(exp)导入(imp)说明

    2009-03-06 10:49:00
  • 详解Python如何实现发送带附件的电子邮件

    2022-03-20 13:33:46
  • Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树

    2022-11-20 01:32:46
  • 微信小程序实现搜索功能

    2024-05-02 16:17:16
  • mssql无数据库日志文件恢复数据库的方法第1/2页

    2024-01-28 16:33:52
  • 使用mysqli完成事务处理

    2011-03-29 15:49:00
  • python学习之基于Python的人脸识别技术学习

    2021-04-23 22:09:25
  • golang获取网卡信息操作

    2024-02-22 01:57:17
  • Mysql索引选择以及优化详解

    2024-01-18 13:56:12
  • asp.net 为FCKeditor开发代码高亮插件实现代码

    2023-09-26 00:30:16
  • tensorflow: 查看 tensor详细数值方法

    2022-07-24 09:40:37
  • asp之家 网络编程 m.aspxhome.com