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
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
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


猜你喜欢
- 帮朋友制作一个网站,需要一些产品数据信息,因为是代理其他公司产品,直接爬取代理公司产品数据1.设计数据库from django.db imp
- 1.去重示例表内容参考此文章有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数
- 用AJAX刷新一个DIV中的jsp内容 <script type="text/javascript"> va
- 本文实例为大家分享了Python threading模块对单个接口进行并发测试的具体代码,供大家参考,具体内容如下本文知识点通过在threa
- 利用Python写了一个小脚本想要传给使用Windows但没有装Python的朋友执行,这时候就可以利用将档案包装成exe档案,让没有Pyt
- 下面有两种方法都可以:import numpy as npa=np.asarray([[10,20],[101,201]])# a=a[:,
- jupyter介绍jupyter的全称为Jupyter Notebook,之前一度被称为(IPython notebook),是一种交互式的
- 使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的当输入为纯数字时:inpu
- 1、requests 的常见用法requests 除了 url 之外,还有 params, data 和 files 三个参数,用于和服务器
- 最近在学习python过程中,对print()打印输出函数进行了进一步学习。python 2.6中,print输出内容需要使用引号。pyth
- 一、安装在 cmd 命令中输入: pip install pygame即可安装成功了二、第一个代码实例代码快里面有注释,想必大家都可以看懂的
- 一、从线性规划到整数规划1.1、为什么会有整数规划?线性规划问题的最优解可能是分数或小数。整数规划是指变量的取值只能是整数的规划。这在实际问
- mysql 误删除ibdata1之后如何恢复如果误删除了在线服务器中mysql innodb相关的数据文件ibdata1以及日志文件 ib_
- 前言双端队列deque支持从任意一端增加和删除元素。其中,栈和队列就是双端队列的退化形式,它们的输入输出被限制在某一端。基本用法首先,我们来
- 前言:array数组要转换成矩阵(matrix)数据类型才能进行一系列的线性运算。matrix类型也有时候要转换成array数组。代码:1.
- 我就废话不多说了,大家还是直接看代码吧!#加载keras模块from __future__ import print_functionimp
- 前言平台:windows 10.0python 3.8oraclemysql目的需要通过python处理数据,并将结果保存至SQL数据库中,
- 介绍An open source load testing tool.一个开源性能测试工具。define user behaviour wi
- 一、官方解释:1.v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件 * 和子组件适当地被销毁和重建。2.v-if 也是
- 在之前文章给大家分享后不久,就有位小伙伴跟小编说在用scrapy搭建python爬虫中出现错误了。一开始的时候小编也没有看出哪里有问题,好在