python 之生成器表达式,以及与列表推导式的区别

news2024/11/16 2:31:57

文章目录

    • 生成器表达式
      • 基本结构
      • 示例
        • 生成一个简单的生成器
        • 遍历生成器并获取值
        • 使用条件过滤
      • 优点
    • 生成器表达式与列表推导式的区别
      • 1. 返回类型
      • 2. 生成方式
      • 3. 内存占用
      • 4. 访问方式
      • 示例
      • 总结

在这里插入图片描述

生成器表达式是一种在 Python 中用来创建生成器的高效方法。生成器表达式和列表推导式类似,但使用圆括号来表示。与列表推导式不同的是,生成器表达式不会立即计算和存储所有值,而是按需逐个生成值,这样可以节省内存。

生成器表达式

基本结构

生成器表达式的基本结构如下:

gen_exp = (expression for item in iterable)
  • expression 是要生成的值或对元素的操作。
  • item 是可迭代对象中的每个元素。
  • iterable 是一个可迭代对象,如列表、元组等。

示例

生成一个简单的生成器
gen = (x * 2 for x in range(5))
print(gen)  # 输出: <generator object <genexpr> at 0x7f64b6c0c4c0>
遍历生成器并获取值
gen = (x * 2 for x in range(5))

for value in gen:
    print(value)  # 0, 2, 4, 6, 8
使用条件过滤
gen = (x for x in range(10) if x % 2 == 0)
print(list(gen))  # 输出: [0, 2, 4, 6, 8]

优点

  • 惰性计算:生成器表达式是按需生成值的,节省内存。
  • 高效:适用于大型数据集,无需一次性加载全部数据。

生成器表达式是一种强大的工具,特别适用于大型数据集,它可以在需要时逐个产生值,而不是提前生成所有值,这对于内存敏感的情况非常有用。

生成器表达式与列表推导式的区别

生成器表达式和列表推导式在 Python 中都用于快速构建序列,但它们之间有一些关键的区别,特别是在性能和内存使用方面。

1. 返回类型

  • 生成器表达式:生成器表达式返回一个生成器对象,用于按需产生值。
  • 列表推导式:列表推导式返回一个列表,其中包含所有生成的值。

2. 生成方式

  • 生成器表达式:按需生成值,只在需要时一个一个地产生值,不提前生成所有值。
  • 列表推导式:立即生成并存储所有值在内存中,因此占用的内存较多。

3. 内存占用

  • 生成器表达式:占用的内存较少,因为只在需要时逐个生成值。
  • 列表推导式:会提前生成全部的值并存储在内存中,对于大型数据集可能占用大量内存。

4. 访问方式

  • 生成器表达式:只能从左到右按需访问一次,生成的值不会被保留,生成器对象只能访问一次,再次访问就是空
  • 列表推导式:生成的列表可以多次访问,所有的值都被存储在内存中。

示例

生成器表达式

gen = (x * 2 for x in range(5))
print(gen)  # 输出: <generator object <genexpr> at 0x7f64b6c0c4c0>

列表推导式

list_comp = [x * 2 for x in range(5)]
print(list_comp)  # 输出: [0, 2, 4, 6, 8]

总结

  • 生成器表达式更节省内存,特别适用于大型数据集。
  • 列表推导式会提前生成所有值,适用于需要多次访问的场景。

根据需要选择合适的工具。如果只需一次迭代或内存有限,生成器表达式是更好的选择;如果需要多次访问或需要立即获得所有值,列表推导式更适合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

The valid characters are defined in RFC 7230 and RFC 3986

服務器通過Body 對象接收參數&#xff0c;而客戶端通過param 地址URL傳參數&#xff0c;不能解析。 return axiosHelper<Protocol<ABC[]>>({method: POST,url: ,data: _reqparams: {data: _req}}) public List<InvoiceItem> getAAAA(RequestBody Query quer…

Ubuntu 22.04.3 LTS中安装singularity

文章目录 概要背景知识什么是singularity ? 安装流程1. 安装Go2. 下载Singularity3. 编译Singularity源代码 4. 验证安装是否成功singularity的使用安装open structure 小结 概要 这里主要记录singularity的安装和使用&#xff0c;安装过程中会出现相关的错误&#xff0c;所以…

redis: 记录一次线上redis内存占用过大问题解决过程

引言 记录一次线上redis占用过大的排查过程&#xff0c;供后续参考 问题背景 测试同事突然反馈测试环境的web系统无法登陆&#xff0c;同时发现其他子系统也存在各类使用问题 排查过程 1、因为首先反馈的是测试环境系统无法登陆&#xff0c;于是首先去查看了登陆功能的报错…

阿里微服务质量保障系列:故障演练

对于很多大型企业(如阿里巴巴)来说,经过多年的技术演进,系统工具和架构已经高度垂直化,服务器规模也达到了比较大的体量。当服务规模大于一定量(如10000台)时,小概率的硬件故障每天都会发生。这时如果需要人的干预,系统就无法可靠的伸缩。 为此每一层的系统都会面向失…

数据库SQL

数据库&SQL 数据库基本概念数据库DataBase定义 数据库管理系统(DBMS)定义在JAVA项目中与数据库的结合数据库管理系统中常见的概念库与表的关系 SQL数据类型数字类型浮点类型字符类型TEXT类型日期类型 SQL语言的分类DDL:数据定义语言修改表结构的注意事项 DML:数据操作语言D…

关于卷积神经网络的池化层(pooling)

了解池化层 池化层又称“下采样层”或“子采样层”&#xff0c;池化层可以大大降低特征的维度&#xff0c;减少计算量&#xff0c;同时可以避免过拟合问题。 顾名思义&#xff0c;最大池化层就是从输入的矩阵中某一范围内&#xff0c;选择最大的元素进行保留&#xff1b;平均池…

在MacBook上实现免费的PDF文件编辑

之前我想对PDF文件进行简单处理&#xff08;比如删页面、添空白页、调整页面顺序&#xff09;&#xff0c;要么是开wps会员【花钱贵】&#xff0c;下载&#xff08;盗版&#xff09;Adobe Acrobat【macOS不好下载】&#xff0c;要么用福昕阅览器登陆学生账号&#xff08;学校买…

运算符重载(operator)

语法&#xff1a; 返回值 operator 运算符 ( 参数 ) 例&#xff1a; Point operator(const Point &p1,const Point &p2); //输出 Point 类型的输出运算符重载函数 ostream & operator<<(ostream& out,Point &p) {cout << "输出运算符…

01. Python基础环境搭建

目录 1、什么是Python 2、Python的特点 3、基础环境搭建 3.1、下载安装解释器 3.2、hello world 4、集成开发环境&#xff1a;PyCharm 4.1、下载安装Pycharm 4.2、新建简单Demo 1、什么是Python Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Pytho…

Android EditText 实现强制性弹出只能输入英文的键盘

如果 EditText 控件不做任何特殊处理&#xff0c;例如笔者手机默认弹出的是百度输入法的软键盘&#xff0c;可实现中英文切换&#xff0c;并且自带英文单词智能联想功能&#xff08;与系统安装输入法和设置相关&#xff09;。但在某些应用场景下&#xff0c;例如在英语APP里练习…

在CSDN上挣点外快的小tips

作为一个在csdn上也挣了一点辛苦费的博主&#xff0c;个人简单总结了两个方法。 1、道德的方法 如上图&#xff0c;可以把自己曾经做过的一些设计或其它资源类的内容&#xff0c;打包传到CSDN的资源池中&#xff0c;有条件的可以写个文章引流一下&#xff0c;运气好的话会有人下…

Python基础入门(6)----Python控制流:if语句、for循环、while循环、循环控制语句

文章目录 Python控制流:if语句、for循环、while循环、循环控制语句if语句示例:for循环示例:while循环示例:循环控制语句示例:最佳实践Python控制流:if语句、for循环、while循环、循环控制语句 控制流是编程中的基础概念,它允许我们根据不同的条件执行不同的代码块,或者…

中西部地区教育正获优质均衡高质量发展

教育部日前消息&#xff0c;2022年我国基础教育财政性教育经费达3.2万亿元&#xff0c;比2015年增加了1.3万亿元&#xff0c;年均增长7.7%。近些年来&#xff0c;我国基础教育各学段财政总投入和生均支出逐年只增不减&#xff0c;为推动基础教育优质均衡发展提供了有力支撑。 …

antd 表单项联动验证时,disabled属性不生效

在antd表单中&#xff0c;表单项验证条件是根据其他表单项的值决定的&#xff0c;比如当前【时间限制】选择【无】时&#xff0c;【限制时段】表单项不可用 所以我单纯使用 disabled{sourceForm.getFieldValue().timeLimit}是不生效的&#xff0c;因为disabled切换会涉及到st…

怎么在相册里去水印?三种方法教你去除

当你查看相册时&#xff0c;有时可能会注意到一些照片上有水印&#xff0c;这可能会让人感到不满,不管你是想保存这些照片还是与他人分享&#xff0c;水印往往会影响图片的观赏效果&#xff0c;不过别担心我将向你介绍一些简单的方法&#xff0c;帮助你在相册中轻松去除这些水印…

解决docker tag打标签时报错:Error response from daemon: no such id

现象&#xff1a; 原因&#xff1a; docker tag时不仅仅要Repository仓库名&#xff0c;也需要原有的tag作为版本号 解决办法&#xff1a; docker tag 原有仓库名: 原有tag值 新的打标名称 问题解决&#xff01;

适合汽车应用的MAX49017ATA/VY、MAX40025AAWT、MAX40025CAWT、MAX40026ATA/VY(线性)微功耗比较器

一、MAX49017ATA/VY 内置基准电压源的1.7V、双通道微功耗比较器 MAX49017是一款节省空间的双通道比较器&#xff0c;内置基准电压源&#xff0c;提供推挽输出。该器件通过了AEC-Q100认证&#xff0c;非常适合汽车应用&#xff0c;例如汽车电池监控系统、信息娱乐系统音响主机和…

冰点还原精灵 Deep Freeze 管理密码忘了怎么办?

环境&#xff1a; Win10 专业版 Deep Freeze V.8.63 问题描述&#xff1a; 冰点还原精灵 Deep Freeze 管理密码忘了怎么办&#xff1f; 解决方案&#xff1a; 1.找一台安装Deep Freeze V.8.63相同版本的电脑&#xff0c;进入PE复制C盘Persi0.sys文件 2.到要破解电脑上进入…

DAY 12 结构体(重点) 共用体 枚举01

1.结构体 1.概念 将基本类型或构造类型封装在一起&#xff0c;拥有独立空间&#xff0c;这个数据结构 就叫结构体。 结构体 使用的关键字 struct. 一个结构体可以定义多个结构体变量 2.定义 注意&#xff1a; 1,结构体定义一般在头文件中 2,不要在定义结构体时给其成员初始…