当前位置: 首页 > news >正文

Python推导式和生成器表达式

Python推导式

Python推导式是一种可以从一个数据序列构建另一个新的数据序列的结构体。

除了列表推导式 (list comprehension) 以外,还有字典(dict)、集合(set)推导式。它们的语法格式如下:

# 列表:使用方括号
[expression for item in iterable if condition]# 字典:使用花括号 `{}` 和提供键值对
{ key_expr: value_expr for value in collection if condition }#集合:使用花括号 `{}`,但只包含单个表达式
{ expression for item in Sequence if conditional }

示例如下:

squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares)
# 结果: [0, 4, 16, 36, 64]squares_dict = {x: x**2 for x in range(10) if x % 2 == 0}
print(squares_dict)
# 结果: {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}squares_set = {x**2 for x in range(10) if x % 2 == 0}
print(squares_set)
# 结果: {0, 64, 4, 36, 16}

生成器表达式

生成器表达式(generator expression) 与列表推导式类似,但它会返回一个生成器对象。生成器对象是惰性求值的,只有在迭代时才会计算出每一个值,节省内存。

语法为:

(expression for item in iterable if condition)

注意:生成器表达式使用的是圆括号。

由于语法结构类似,有些地方会把生成器表达式称为“元组推导式”,或者把两者混为一谈。通常,所谓的“元组推导式”实际上是指生成器表达式。

如果按照Python推导式的定义,”元组推导式“应该返回一个元组,但实际输出结果是一个生成器对象。

示例:

squares_gen = (x**2 for x in range(10) if x % 2 == 0)
print(squares_gen)
# 结果: <generator object <genexpr> at 0x7d1915779770>

在上述示例中,生成器表达式返回一个生成器对象,而不是元组。

元组构造器:

如果想要生成元组,而不是生成器对象,可以结合生成器表达式和tuple()构造函数:

squares_tuple = tuple(x**2 for x in range(10) if x % 2 == 0)
# 结果: (0, 4, 16, 36, 64)

总结来说,生成器表达式用于惰性求值和节省内存,而“元组推导式”并不存在,生成元组需结合生成器表达式与tuple()函数

小结

# 列表推导式
list_comprehension = [expression for item in iterable if condition]# 字典推导式
dict_comprehension = {key_expr: value_expr for item in iterable if condition}# 集合推导式
set_comprehension = {expression for item in iterable if condition}# 生成器表达式
generator_expression = (expression for item in iterable if condition)# 生成元组
tuple_from_generator = tuple(expression for item in iterable if condition)
http://www.lryc.cn/news/417406.html

相关文章:

  • 比较支持向量机、AdaBoost、逻辑斯谛回归模型的学习策略与算法
  • Android顶部标题栏自定义,添加按钮
  • Spring Boot 整合 Dubbo3 + Nacos 2.4.0【进阶】+ 踩坑记录
  • 浙江省食品安全管理员题库及答案
  • C++ 几何算法 - 求两条直线交点
  • Linux操作系统简介
  • 【Python机器学习】回归——缩减系数来“理解”数据
  • 组件设计原则
  • 简单搭建vue项目
  • ctfhub Bypass disable_function
  • 【Qt】探索Qt网络编程:构建高效通信应用
  • 【Android Studio】原生应用部署第三方插件(探针)
  • 嵌入式学习之路 15(C语言基础学习——指针操作一维字符型数组)
  • C++ STL专题 list的底层实现
  • 【JavaEE】线程池
  • lvs实战项目-dr模式实现
  • JSONP跨域
  • Linux--shell脚本语言—/—终章
  • 免费代理池是什么,如何使用代理IP进行网络爬虫?
  • CAN直接网络管理(20240805)
  • HTML5+CSS3笔记(Xmind格式):第二天
  • 视频压缩文件太大了怎么缩小?6个视频压缩技巧,速度收藏起来!
  • Python接口自动化测试数据提取分析:Jmespath
  • 特种设备作业叉车司机题库及答案
  • Linux 操作系统速通
  • IIS漏洞大全(附修复方法)
  • HarmonyOS笔记3:从网络数据接口API获取数据
  • Mac 下生成core dump
  • 详解Xilinx FPGA高速串行收发器GTX/GTP(1)--SerDes和GTX的关系
  • golang实现Digest认证鉴权接口