Python高级函数1:使用 map()、reduce()、filter()、zip() 和 enumerate() 简化代码

2023-11-01

Python高级函数1:使用 map、reduce、filter、zip和 enumerate 简化代码

Python 是一种通用且广泛使用的编程语言,提供一系列内置函数和库来帮助完成各种任务。
这篇博客将介绍一些Python中可以简化代码并提高效率的高级函数。包括map()、reduce()、filter()、zip()和 enumerate()函数,这些函数可以帮助编写更高效、更简洁的代码。

1. 原理

1.1 map() 函数

将指定的函数应用于可迭代对象(例如列表、元组或字符串)的每个元素,并返回具有修改后元素的新可迭代对象。也可应用于多个可迭代对象,将每一个迭代对象对应的元素进行相应的操作;

1.2 reduce() 函数

Python中 functools 模块的一部分,允许将函数应用于一系列元素,以便将它们减少到单个值。 例如可以使用 reduce() 将列表的所有元素相乘;
reduce()函数 还可以指定一个初始值作为其第三个参数。在这种情况下,初始值将用作函数的第一个参数,迭代对象的第一个元素将用作第二个参数。 例如,您可以使用 reduce()来计算数字列表的总和

1.3 filter() 函数

通过删除不满足指定条件的元素来过滤可迭代对象。它返回一个新的可迭代对象,其中仅包含满足条件的元素。 例如使用 filter()从列表中删除所有偶数;
filter() 也可以传递lambda 函数作为第一个参数

1.4 zip() 函数

将多个可迭代对象组合成一个元组的可迭代对象。zip()函数在最短的可迭代对象用尽时停止。 例如使用 zip() 将两个列表合并为元组列表;
也可以使用zip() 连接多个可迭代对象;
可以通过在函数调用或列表推导中使用 * 运算符来解压缩 zip()对象中的元组,如在函数调用中解包tuple/list表达式中解包tuple

1.5 enumerate() 函数

它向可迭代对象添加一个计数器并返回一个可迭代的元组,这些函数可以编写更干净、更简洁的代码;
也可以传递第2个参数指定计数器的起始值

2. 源码

# python高级函数1:map()、reduce()、filter()、zip()和 enumerate()
# python python_high1.py

# map() 函数,将指定的函数应用于可迭代对象(例如列表、元组或字符串)的每个元素,并返回具有修改后元素的新可迭代对象。
def get_lengths(words):
    return map(len, words)


words = ['cat', 'window', 'defenestrate']
lengths = get_lengths(words)
print(list(lengths))  # [3, 6, 12]

from functools import reduce


def multiply(x, y):
    return x * y


a = [1, 2, 3]
b = [10, 20, 30]
# map()函数也可应用于多个可迭代对象,将每一个迭代对象对应的元素进行相应的操作
result = map(multiply, a, b)
print(list(result))  # [10, 40, 90]


def multiply(x, y):
    return x * y


a = [1, 2, 3, 4]
# reduce()函数是 Python中functools模块的一部分,允许将函数应用于一系列元素,以便将它们减少到单个值。例如可以使用reduce()将列表的所有元素相乘
result = reduce(multiply, a)
print(result)  # 24

from functools import reduce


def add(x, y):
    return x + y


a = [1, 2, 3, 4]
# reduce()函数 还可以指定一个初始值作为其第三个参数。在这种情况下,初始值将用作函数的第一个参数,迭代对象的第一个元素将用作第二个参数。 例如,您可以使用 reduce()来计算数字列表的总和
result = reduce(add, a, 0)
print(result)  # 10


def is_odd(x):
    return x % 2 == 1


a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#  filter()函数通过删除不满足指定条件的元素来过滤可迭代对象。它返回一个新的可迭代对象,其中仅包含满足条件的元素。 例如使用 filter()从列表中删除所有偶数
odd_numbers = filter(is_odd, a)
print(list(odd_numbers))  # [1, 3, 5, 7, 9]

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# filter()以 lambda 函数作为第一个参数
odd_numbers = filter(lambda x: x % 2 == 1, a)
print(list(odd_numbers))  # [1, 3, 5, 7, 9]

#  zip()函数将多个可迭代对象组合成一个元组的可迭代对象。zip()函数在最短的可迭代对象用尽时停止。 例如可以使用 zip()将两个列表合并为元组列表:
a = [1, 2, 3]
b = ['a', 'b', 'c']
zipped = zip(a, b)
print(list(zipped))  # [(1, 'a'), (2, 'b'), (3, 'c')]

a = [1, 2, 3]
b = ['a', 'b', 'c']
c = [True, False, True]
# 使用zip()连接多个可迭代对象
zipped = zip(a, b, c)
print(list(zipped))  # [(1, 'a', True), (2, 'b', False), (3, 'c', True)]


# 可以通过在函数调用或列表推导中使用 * 运算符来解压缩 zip()对象中的元组
def print_tuples(a, b, c):
    print(f'a: {a}, b: {b}, c: {c}')


a = [1, 2, 3]
b = ['a', 'b', 'c']
c = [True, False, True]
zipped = zip(a, b, c)

# 在函数调用中解包tuple
for t in zipped:
    print_tuples(*t)

print('------------------------------------------')
zipped = zip(a, b, c)
# list表达式中解包tuple
unzipped = [print_tuples(*t) for t in zipped]
print(unzipped)

# enumerate()函数向可迭代对象添加一个计数器,并返回一个元组的可迭代对象,其中每个元组由计数器和原始元素组成。 例如可以使用 enumerate()循环访问列表并打印每个元素的索引和值
a = ['a', 'b', 'c']
for i, element in enumerate(a):
    print(f'{i}: {element}')

a = ['a', 'b', 'c']
# 也可以传递第2个参数指定计数器的起始值
for i, element in enumerate(a, 1):
    print(f'{i}: {element}')

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python高级函数1:使用 map()、reduce()、filter()、zip() 和 enumerate() 简化代码 的相关文章

  • 如果两点之间的距离低于某个阈值,则从列表中删除点

    我有一个点列表 只有当它们之间的距离大于某个阈值时 我才想保留列表中的点 因此 从第一个点开始 如果第一个点和第二个点之间的距离小于阈值 那么我将删除第二个点 然后计算第一个点和第三个点之间的距离 如果该距离小于阈值 则比较第一点和第四点
  • 是否有解决方法可以通过 CoinGecko API 安全检查?

    我在工作中运行我的代码 一切都很顺利 但在不同的网络 家庭 WiFi 上 我不断收到403访问时出错CoinGecko V3 API https www coingecko com api documentations v3 可以观察到 在
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 您可以格式化 pandas 整数以进行显示,例如浮点数的“pd.options.display.float_format”?

    我见过this https stackoverflow com questions 18404946 py pandas formatdataframe and this https stackoverflow com questions
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street

随机推荐

  • 实战演习(十)——通过LSTM训练天气污染程度预测模型

    我的公众号为 livandata 近期由于工作用到LSTM模型 借这个机会整理一下思路 在网上找了很多资料 受益匪浅 本文参考 https blog csdn net u012735708 article details 82769711
  • 盘点:大数据处理必备的十大工具

    摘要 随着互联网的愈来愈开放 电子商务平台和社交网络的盛行 导致数据在日益增长 给企业管理大量的数据带来了挑战的同时也带来了一些机遇 随着互联网的愈来愈开放 电子商务平台和社交网络的盛行 导致数据在日益增长 给企业管理大量的数据带来了挑战的
  • JupyterNotebook--基础--02--安装

    JupyterNotebook 基础 02 安装 1 安装 pip3 install jupyter pip3 install ipython 2 生成配置文件 用于后面写入ip 端口号 密码等 jupyter notebook gener
  • angularjs php登录验证,AngularJs用户登录时交互及验证步奏详解

    这次给大家带来AngularJs用户登录时交互及验证步奏详解 AngularJs用户登录时交互及验证的注意事项有哪些 下面就是实战案例 一起来看一下 1 静态页面搭建及ng的form表单验证实现 ng disabled loginForm
  • 为什么提高断路器分闸速度,能减少电弧重燃的可能性和提高灭弧能力?

    为什么提高断路器分闸速度 能减少电弧重燃的可能性和提高灭弧能力 答 提高断路器的分闸速度 即在相同的时间内触头间的距离增加较大 电场强度降低 与相应的灭弧室配合 使之在较短时间内建立强有力的灭弧能力 又能使熄弧后的间隙在较短时间内获得较高的
  • c++智能指针——原理与实现

    转子 https www cnblogs com wxquare p 4759020 html 1 智能指针的作用 C 程序设计中使用堆内存是非常频繁的操作 堆内存的申请和释放都由程序员自己管理 程序员自己管理堆内存可以提高了程序的效率 但
  • Mac系统完美安装PHP7详细教程

    使用第三方包homebrew来安装 非常迅速有效 安装教程 1 启动Apache 首先我们启动系统自带的Apache服务 打开Terminal 输入如下指令 开启Apache服务 sudo apachectl start 查看Apache版
  • DCN和DCNv2(可变性卷积)学习笔记(原理代码实现方式)

    DCN和DCNv2 可变性卷积 网上关于两篇文章的详细描述已经很多了 我这里具体的细节就不多讲了 只说一下其中实现起来比较困惑的点 黑体字会讲解 DCNv1解决的问题就是我们常规的图像增强 仿射变换 线性变换加平移 不能解决的多种形式目标变
  • Java的mkdir()与mkdirs()引发的悲剧---关于java的mkdir()方法无法创建文件目录问题

    昨晚深夜在做项目的文件上传 在上传之前要先判断指定的文件目录是否存在 如果不存在就先创建改目录 因为之前已经做过类似的功能了 所以就把判断文件目录以及创建的代码直接copy过来了 然而很郁闷的是 一模一样的代码 这回却遇到一个特别奇葩的问题
  • 【python】CliffWalking悬崖寻路问题

    强化学习 简介 gym库 CliffWalking SARSA Q learning 示例 SARSA Q learning 简介 机器学习 监督学习 非监督学习 强化学习 模仿人类和动物的试错机制进行学习 智能体与环境交互 根据当前的环境
  • 数据结构面试常见问题总结

    数据结构面试常见问题总结 写在前面 本文记录了一些数据结构面试常见问题 本意用于考研复试 以下面试题为网上整理的问题以及自己加入的一些问题 答案仅供参考 Q 数据结构三要素 A 逻辑结构 物理结构 数据运算 Q 数组与链表有什么区别 A 数
  • innovus中常用命令整理

    restoreDesign load 之前的db list property type 列举出相应的属性 get property 得到相应的object的属性 get pin 获取pin get port 获取port ecoRoute
  • 2023开学礼山东财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉新财经图书馆

    2023开学礼山东财经大学 乡村振兴战略下传统村落文化旅游设计 许少辉新财经图书馆
  • adworld攻防世界 reverse asong

    asong 攻防世界 reverse 进阶区 asong 题目文件 https www jianguoyun com p DQ3g5b4QiNbmBxjX fQC 访问密码 AgV9Sh 主要是集中我们常见的处理方式的整合 注意一个对于ou
  • 进程间通信---管道通信

    进程间通信为什么有那么多不同的方法 资源的不同 所以通信的方式不同 想要获取管道资源 就需要用管道来通信 想要获取消息队列资源 就需要用消息队列来通信 如上所示 一个进程就是一个PCB PCB中的file struct有三个默认文件描述符
  • 【转】 如何提高自己的acm个人能力

    转载自 简单de数字 最终编辑 fading code by zfy0701 本来以为HNU的huicpc035和我一样退役了 后来听说他组成了新的footman队 于是又关注了下他 035体现了两个我觉得非常重要的品质 1 刻苦的训练 2
  • vmtools的安装和使用

    介绍 vmtools工具是在虚拟系统和主机系统进行共享文件夹的工具 1 用root用户登录CentOS后删除桌面的光驱 2 点击菜单栏的虚拟机 gt 安装VMwareTools 3 安装结果如下所示 4 打开VMwareTools 复制VM
  • 【python】Something is wrong with the numpy installation

    2020年2月5日 0次阅读 共448个字 0条评论 0人点赞 QueenDekimZ COCO API windows下安装COCO API时 python setup py build ext install 出现报错 ImportEr
  • Unity中UI框架的使用3-主界面中的弹窗和关闭

    效果图 在主页面点击排位赛按钮 就会弹出图2中的一个弹窗 再点击弹窗右上角的关闭按钮 就会关闭弹窗 回到图3的效果 方法 1 将PopUp这个面板添加到UIPanelType cs文件中 并且将其名称和路径添加到UIPanelType js
  • Python高级函数1:使用 map()、reduce()、filter()、zip() 和 enumerate() 简化代码

    Python高级函数1 使用 map reduce filter zip和 enumerate 简化代码 1 原理 1 1 map 函数 1 2 reduce 函数 1 3 filter 函数 1 4 zip 函数 1 5 enumerat