python进阶学习(2)--列表推导和生成器表达式

生成器和生成器表达式 本节主要内容: 1. 生成器和生成器函数 2. 列表推导式 一. 生成器 什么是生成器. 生成器实质就是迭代器. 在python中有三种方式来获取生成器: 1. 通过生成器函数 2. 通过各种推导式来实现生成器 3. 通过数据的转换也可以获取生成器 首先, 我们先看一个很简单的函数: 把函数中的return换成yield就是生成器函数 运行... 阅读详情

列表推导

列表推导(list comprehesion)可以从可迭代类型中的元素过滤或加工,构建出一个序列。

不用列表推导:

>>> symbols = 'abc123'
>>> codes = []
>>> for symbol in symbols:
...     codes.append(ord(symbol))
...
>>> codes
[97, 98, 99, 49, 50, 51]

用列表推导:

>>> symbols = 'abc123'
>>> codes = [ord(symbol) for symbol in symbols]
>>> codes
[97, 98, 99, 49, 50, 51]

还可以用来生成两个或以上的可迭代类型的笛卡尔积,即两层或多层 for 循环的列表推导。

两层 for 循环的列表推导:

>>> colors = ['black', 'white']
>>> sizes = ['S', 'M', 'L']
>>> tshirts = [(color, size) for color in colors for size in sizes]
>>> tshirts
[('black', 'S'), ('black', 'M'), ('black', 'L'), ('white', 'S'), ('white', 'M'), ('white', 'L')]

相当于:

>>> for color in colors:
...     for size in sizes:
...             print((color, size))
...
('black', 'S')
('black', 'M')
('black', 'L')
('white', 'S')
('white', 'M')
('white', 'L')

需要注意的是,列表推导的前一个 for 循环就是外层 for 循环,后一个 for 循环就是内层 for 循环。

另外,python3.x 就不存在变量泄露的问题,列表推导内部的变量是局部的,仅限于列表推导内,同时也可以引用上下文的同名变量:

# python3.9
>>> x = 'ABC'
>>> dummy = [ord(x) for x in x]
>>> x
'ABC'

可以看到 x 变量并没有改变,如果是在 python2.x 中,它的值就被改变为 'C'。

# python2.7
>>> x = 'ABC'
>>> dummy = [ord(x) for x in x]
>>> x
'C'

使用列表推导的最大好处就是可读性更高。因此,一般建议两层 for 循环内使用列表推导。

生成器表达式

生成器表达式的语法跟列表推导类似,不同的是表达式外面用括号。但是,本质上的不同是生成器表达式遵守迭代器协议,逐个地产出元素,而不是一次性产出一个所有的数据,而列表推导先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。

总的来说就是,生成器表达式比列表推导更节省内存。

>>> symbols = 'abc132'
>>> tuple(ord(symbol) for symbol in symbols)            # 1
(97, 98, 99, 49, 51, 50)
>>>
>>> import array
>>> array.array('I', (ord(symbol) for symbol in symbols))   # 2
array('I', [97L, 98L, 99L, 49L, 51L, 50L])

如果生成器表达式是函数调用过程的唯一参数,那么可以省略外层的括号。

下面的例子比较,可以看出生成器表达式是在每次执行 for 循环时,才产出一个元素。

>>> s = 'apple'
>>> t = (ord(s) for s in s)
>>> for a in t:
...     print(a)
...
97
112
112
108
101
>>> for a in t:
...     print(a)
...
>>>

t 是一个生成器,第一次执行 for 循环遍历后,可以逐个输出 s 的字符,但是第二次执行 for 循环时,生成器 t 已经产生所有的元素,相当于指针已经指向 s 的末尾,就不再有元素产出,所以什么元素都没有输出。

python中的推导式、生成器 通过一行循环判断遍历出一些列数据的方法叫做推导式 推导式comprehensions(又称解析式),是Python的一种独有特性。 推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 阅读详情

相关推荐

晶圆测试(wafer sort)全流程解析:从探针卡到良率统计的实战指南

本文详细解析了晶圆测试(wafer sort)的全流程,从探针卡选型到良率统计的实战指南。涵盖了12英寸先进制程产线的关键技术,包括探针卡系统、测试程序开发、产线自动化集成及数据分析,特别聚焦多站点并行测试的时序优化和接触阻抗异常排查,帮助工程师提升测试效率与准确性。

weixin_29279153的博客 731

WPSJS插件实战:用Python Flask搭建自动化文档处理系统

本文详细介绍了如何利用WPSJS插件与Python Flask后端构建自动化文档处理系统,涵盖环境搭建、核心功能开发、前后端集成及高级功能实现。通过实战案例,帮助开发者掌握WPS插件开发与文档自动化处理技术,提升办公效率。

weixin_30772105的博客 490

深入解析BLheli电调固件与Dshot通讯协议:从原理到实践

本文深入解析了无人机动力系统的核心——BLheli电调固件与Dshot通讯协议。详细阐述了BLheli固件从经典版到BLheli_32的演进及其功能特性,并重点剖析了Dshot数字协议如何通过数据包和校验码实现更快、更准、更可靠的电机控制。文章还涵盖了双向Dshot遥测、实战配置与调参指南,帮助玩家充分释放无人机性能。

weixin_28273593的博客 434

Python列表推导式和生成器表达式

和列表一样,列表推导式也采用

RangeBlog 5230

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南)

本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。

weixin_29176179的博客 199

红外小目标检测新思路:当DETR遇上Mamba状态空间模型,速度提升3倍

本文探讨了将Mamba状态空间模型与DETR框架结合,用于解决红外小目标检测的难题。该创新方案通过线性复杂度的Mamba模块替代传统Transformer的自注意力机制,在保持高检测精度的同时,显著提升了推理速度,实现了实时性能的突破,为无人机巡检、安防监控等场景提供了高效解决方案。

hhh00的博客 664

Flutter与OpenHarmony跨平台词云开发实践

词云作为数据可视化的重要形式,通过文本关键词的视觉化布局,直观呈现信息特征。其核心原理基于文本分析与空间布局算法,在移动开发中常采用螺旋布局等优化方案平衡性能与展示效果。Flutter框架凭借Skia渲染引擎的高效绘制能力,结合OpenHarmony的分布式特性,为跨平台词云开发提供了新的技术路径。这种组合方案特别适合新闻聚合、商业智能和教育类应用场景,既能保证Dart语言开发的跨平台一致性,又能通过平台通道调用原生能力。在实现过程中,开发者需要重点关注词云布局算法优化、触摸交互适配以及Flutter与Op

weixin_34372728的博客 378

数据中台:大数据平台,数据仓库(DM),数据中台之间的联系以及异同分析

大数据平台是一个技术平台。这个技术平台提供了对于大数据的分布式采集,存储,流处理和计算,实时分析等能力。在没有大数据平台前也有数据集成和管理的平台,这种平台可以实现对结构化数据本身的采集,集成和管理。 管理平台,是在原生的大数据生态的基础之上,为了更好的管理集群服务,管理集群的资源,提供灵活SRE能力和资源核算审计能力的一系列工具和合称整体架构数据中台包括数据仓库的全部内容,数据仓库为数据中台提供了数据对外提供服务的基础资源,数据中台将数据仓库建设的投入价值进行最大化,以加快数据赋能业务的速度大家都知道数据

GIS摆渡人 2132

python学习之列表推导式和生成器表达式

推导式格式variable = [out_exp_res for out_exp in input_list if out_exp ==2] # out_exp_res:列表生成元素表达式,可以是有返回值的函数 # for out_exp in input_list: 迭代input_list将out_exp传入out_exp_res # if out_exp == 2:根据条件过滤列表推导式例一...

偷窥者的博客 793

128、点云配准与ICP:经典配准算法与深度学习配准

上周调试一台双臂协作机器人,左手持结构光相机扫描桌面上的随机堆叠工件,右手准备执行抓取。问题出在“对齐”这一步——相机扫描得到的点云和CAD模型点云之间差了大约15度的旋转,导致抓取姿态计算出来直接怼到桌面上。我第一反应是“ICP跑一下不就行了”,结果跑了三分钟,误差纹丝不动,甚至越迭代越发散。后来查了日志才发现,初始位姿给得太离谱,ICP直接掉进了局部最优。这个场景太典型了——很多人以为点云配准就是调个ICP库函数,实际工程里坑比想象中多得多。今天这篇笔记,咱们把点云配准这件事从头捋一遍。

sundong_81的博客 42

OpenHarmony之Histreamer引擎深度解析:pipeline_core架构如何全面取代GStreamer,一统音视频播放与录制

Histreamer是OpenHarmony多媒体框架的核心媒体引擎,采用架构设计。一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。1.播放场景分为如下几个节点:数据源读取、解封装、解码、输出;2.录制场景分为如下几个节点:数据源读取、编码、封装、输出。该引擎从OH5.0开始取代了原有的媒体引擎gstreamer(部分文档还保留较老架构的讲解),提供统一的音视频播放、录制、元数据解析等能力。

m0_67505153的博客 332

Python之列表推导式

如下是Python官方文档中列表推导式部分的译文,笔者对于该部分也是初学,只能从官方文档学起了。有不合适的地方还望指正,谢谢。 Python官网列表推导式部分 一 列表推导式   列表推导式提供了一种创建list的简便方法。应用程序创建列表时,列表中的元素来源于其他序列、可迭代对象或创建的一个满足一定条件的序列。   例如,假设我们要创建一个平方数组成的列表,比如: squares

张之海的博客 1万+

【文献阅读】使用深度语音后验改进独立于说话者的构音障碍可懂度分类

原文名称:本文探讨了利用DeepSpeech后验概率改进说话人无关的构音障碍可理解性分类方法。作者提出了一个基于DeepSpeech(一种端到端的语音转文本引擎)输出的新特征集,用于评估构音障碍患者的语音可理解性。这些新特征在说话人无关的情况下表现良好,能够更好地处理不同说话人的变异性。背景介绍:数据集:特征提取:实验设置:结果:本文提出的新特征集在说话人无关的构音障碍可理解性分类任务中表现出色,特别是在低可理解性和高可理解性类别上。未来的工作将集中在减少低可理解性和中可理解性类别之间的混淆,以进一步提高系

帅小柏的博客 452

Python 列表推导和生成器表达式

列表推导是构建列表的一种方式,生成器表达式可以用来创建其他任何类型的序列

"大梦三千秋的博客 2070

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python基础09-列表推导式和生成器表达式_列表推导式或生成器表达式

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

m0_60635609的博客 971

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python入门 推导式 ! 解释:生成器表达式和列表推导式的区别

Python 入门之 推导式 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895,817, 687 有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家一起学习交流! 推导式就是构建比较有规律的列表,生成器,字典等一种简便的方式 1、推导式 (1)列表推导式 : <1> 普通循环: [变量 for循环] print([i for i in...

weixin_42625143的博客 1074

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python 列表推导式与生成器表达式

列表推导式是 Python 中一种简洁的方式,用于从一个可迭代对象(如列表、元组或字符串)创建一个新的列表。expression:对每个item执行的操作或计算。item:可迭代对象中的每个元素。iterable:需要迭代的对象(如列表、集合、范围等)。condition(可选):筛选符合条件的元素。生成器表达式的语法与列表推导式非常相似,唯一的区别是它使用圆括号()而不是方括号[]。生成器表达式是创建生成器对象的简洁方法,生成器是一个懒加载的可迭代对象。

学习,你不是一个人在战斗 ~ 961302305(QQ,微信) 1354

Python进阶 - 推导式与生成器表达式的核心区别

本文深入探讨了Python中列表推导式与生成器表达式的核心区别,通过对比内存占用、执行时机和可遍历性等维度,揭示了两者的本质差异。列表推导式一次性生成完整列表,适用于数据量小且需重复访问的场景;而生成器表达式采用惰性求值,按需生成数据,显著降低内存消耗,适合处理大规模或无限序列数据。文章通过代码示例、内存测试和实际应用场景(如大文件处理和数学序列生成),直观展示了如何根据需求选择合适的语法结构。关键结论:列表推导式以空间换时间,生成器表达式以时间换空间,开发者应根据具体场景权衡选择。

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

学Python记笔记_列表——列表推导式_矩阵转置_生成器表达式

文章目录一、列表推导式结构二、列表推导式的运行三、用法示例I、求a~d能组成的所有两字符的字符串Ⅱ、矩阵转置完 一、列表推导式结构 列表推导式的结构是一个特殊的列表结构,以空格为间隔,包含表达式和若干个条件语句,其中,条件语句至少有一个for语句 [expression for... [for,if] [for,if]...] 二、列表推导式的运行 列表推导式运行时,首先执行第一个条件语句,之后依次向右执行剩余的条件语句,最后再执行表达式。条件语句之间的关系时自左向右嵌套 运行结束后返回符合条件的所有表达

Ho1aAs‘s Blog 2648

列表推导和生成器表达式

1 概念解释 列表推导是构建列表的快捷方式,生成器表达式可以用来创建其他任何类型的序列。 列表推导:放在方括号里的表达式,使用关键字for与in,通过处理和过滤一个或多个可迭代对象里的元素构建列表。 生成器:使用生成器函数或生成器表达式构建的迭代器,无需迭代集合就可能生成值。生成斐波那契数列的生成器是个典型实例,这个数列是一种无穷序列。 生成器表达式:放在括号里的表达式,句法与列表推导一样,只是返...

我是一只小嵩鼠 742

Python 序列构成的数组(列表推导和生成器表达式)

列表推导是构建列表(list)的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。如果你的代码里并不经常使用它们,那么很可能你错过了许多写出可读性更好且更高效的代码的机会。如果你对我说的“更具可读性”持怀疑态度的话,别急着下结论,我马上就能说服你。很多 Python 程序员都把列表推导(list comprehension)简称为listcomps,生成式表达器(generator expression)则称为 genexps。我有时也会这么用。

钢铁男儿 1135

Python进阶之推导式与生成器

风间琉璃帮助欢迎关注订阅专栏。

风间琉璃的博客 1138

python函数式编程之生成器表达式和列表推导式

表达式和列表推导式是Python中用于快速创建列表和生成器的语法。它们在函数式编程中非常有用,可以简化代码并提高可读性。代码示例:1.的语法:列表推导式的语法形式为`[expression for item in iterable if condition]`,其中`expression`是对`item`的操作或计算,`item`是可迭代对象中的每个元素,`condition`是一个可选的。

NHB456789的博客 734

Python 中如何使用列表推导式与生成器表达式?

Python 作为一门简洁且强大的编程语言,其语言特性之一便是提供了列表推导式和生成器表达式这两种便捷的工具,用来创建和处理数据。这两种表达式不仅让代码更加简洁,还能提升性能。虽然它们有相似之处,但在实现方式和使用场景上有所不同。本文将深入探讨这两种表达式的用法、差异和应用场景,帮助大家更好地理解如何利用它们提高代码的可读性和执行效率。

1067

python【列表推导和生成器表达式】

列表推导和生成器表达式 一、列表推导式 通常原则只用来创建新列表,并尽量保持简短,如果列表代码超过了两行,就要考虑是不是得用for循环重写了 例子1 # 1、创建新列表 new_list = [i for i in range(10)] print(new_list) 运行结果: F:\virtualEnvironment\venv\Scripts\python.exe [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Process finished with exit code 0

一名小测试 637
上一篇: python进阶学习(1)--特殊方法
下一篇: python进阶学习(3)--元组
friEnd`
博客等级 码龄8年 103粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值