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
猜你喜欢
- 相信各位phper在日常开发中,会经常遇到需要合并数组的场景。那么,在php中都有哪一些方法可以用来合并数组呢。第一种,使用&ldq
- 一、抓取全部评论吾的这篇文章,有 1022 次评论,一条条看,吾看不过来,于是想到 Python 词云,提取关键词,倒也是一桩趣
- pip源配置文件可以放置的位置:Linux/Unix:/etc/pip.con~/.pip/pip.conf (每一个我都找了都没有,所以我
- 阅读上一章:Chapter 4 引用互动性一直是互联网的重点,让使用者与网站能够交换信息,彼此沟通.表单使我们能够有组织的,使用同一方式的从
- 一、简介urllib.request.urlopen()函数用于实现对目标url的访问。函数原型如下:urllib.request.urlo
- 本周的PyCoder's Weekly 上分享了一篇小文章,它里面提到的冷知识很有意思,我稍作补充,分享给大家。它提到的部分问题,读
- 几天前,想把上个月校园招聘的餐旅费报销一下。结果在公司内网的报销系统折腾了三个半小时才搞定。看看自己报销的金额:802块。觉得挺无奈,花了三
- 首先去官网下载两个架包链接如下:官网链接第一步:将两个架包解压到同一个database目录下。如截图所示:第二步:打开setup应用程序打开
- 运算符重载意味着赋予超出其预定义的操作含义的扩展含义。例如运算符 + 用于添加两个整数以及连接两个字符串和合并两个列表。这是可以实现的,因为
- 举例吧,这样更容易看的懂。例1:from django.core.exceptions import ObjectDoesNotExistt
- MySQL使用环境变量TMPDIR的值作为保存临时文件的目录的路径名。如果未设置TMPDIR,MySQL将使用系统的默认值,通常为/tmp、
- Python字符串拼接的6种方法:1.加号第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接
- 在Linux系统下Python连接Redis的基本配置方法具体操作步骤系统环境:OS:Oracle Linux Enterprise 5.6
- 通配符:通配符描述示例%包含零个或更多字符的任意字符串。WHERE title LIKE '%computer%' 将查找处
- 本文实例讲述了Python使用文件锁实现进程间同步功能。分享给大家供大家参考,具体如下:简介在实际应用中,会出现这种应用场景:希望shell
- 注意:index.html再次声明变量的时候注意空格的问题来源:https://blog.csdn.net/guofeng93/articl
- 本文实例讲述了Python3实现将文件归档到zip文件及从zip文件中读取数据的方法。分享给大家供大家参考。具体实现方法如下:'
- 前言本篇文章,阐述一下Flask中数据库的迁移为什么要说数据库迁移呢?比如我们以前有一个数据库,里面的信息有 id, name现在我想再加一
- 数据库服务器主要用于存储、查询、检索企业内部的信息,因此需要搭配专用的数据库系统,对服务器的兼容性、可靠性和稳定性等方面都有很高的要求。下面
- 当我们进行数据分析时,有时候需要对数值型数据进行离散化,将其划分为不同的标签或类别。这样做可以方便我们进行统计和分析,并帮助我们更好地理解数