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

Python中推导式和表达式

在 Python 中,推导式(Comprehensions) 和 生成器表达式(Generator Expressions) 是简洁高效的数据结构构造方式,适用于 列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set) 和 生成器(Generator)


1. 列表推导式(List Comprehension)

作用:快速生成列表,比 for 循环更简洁高效。
语法[expression for item in iterable if condition]

示例

(1) 基本形式
squares = [x ** 2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
(2) 带条件过滤
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]
(3) 嵌套循环
pairs = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
print(pairs)  # [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

2. 元组推导式(Tuple Comprehension)

注意:Python 没有真正的 "元组推导式",但可以用 tuple() 包裹生成器表达式。
语法tuple(expression for item in iterable if condition)

示例

even_numbers = tuple(x for x in range(10) if x % 2 == 0)
print(even_numbers)  # (0, 2, 4, 6, 8)

3. 字典推导式(Dictionary Comprehension)

作用:快速生成字典。
语法{key_expr: value_expr for item in iterable if condition}

示例

(1) 基本形式
square_dict = {x: x ** 2 for x in range(5)}
print(square_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
(2) 交换键值
original = {'a': 1, 'b': 2, 'c': 3}
swapped = {v: k for k, v in original.items()}
print(swapped)  # {1: 'a', 2: 'b', 3: 'c'}
(3) 条件过滤
filtered_dict = {k: v for k, v in original.items() if v > 1}
print(filtered_dict)  # {'b': 2, 'c': 3}

4. 集合推导式(Set Comprehension)

作用:生成不重复的无序集合。
语法{expression for item in iterable if condition}

示例

unique_squares = {x ** 2 for x in [-2, -1, 0, 1, 2]}
print(unique_squares)  # {0, 1, 4}

5. 生成器表达式(Generator Expression)

作用:惰性计算(按需生成值),节省内存。
语法(expression for item in iterable if condition)

示例

(1) 基本形式
gen = (x ** 2 for x in range(10))
print(gen)  # <generator object <genexpr> at 0x7f8c0a2b3d60># 逐个取值
for num in gen:print(num, end=" ")  # 0 1 4 9 16 25 36 49 64 81
(2) 与 sum()max() 等函数结合
sum_of_squares = sum(x ** 2 for x in range(10))
print(sum_of_squares)  # 285

总结对比

数据结构推导式语法特点
列表[x for x in iterable]可变,有序
元组tuple(x for x in iterable)不可变,有序
字典{k: v for k, v in iterable}键值对,无序
集合{x for x in iterable}唯一值,无序
生成器(x for x in iterable)惰性计算,节省内存

应用场景

  • 列表推导式:适合构造新列表,如 [x * 2 for x in lst]

  • 字典推导式:适合转换字典,如 {k: v * 2 for k, v in d.items()}

  • 集合推导式:适合去重,如 {x % 5 for x in nums}

  • 生成器表达式:适合大数据处理(避免内存爆炸),如 sum(x ** 2 for x in range(10**6))


性能优化

  • 生成器 > 列表推导式(内存更优)

  • map() + filter() 比推导式更快(但可读性较差)

# 生成器(内存高效)
gen = (x ** 2 for x in range(10**6) if x % 2 == 0)# 列表推导式(立即计算)
lst = [x ** 2 for x in range(10**6) if x % 2 == 0]

掌握推导式可以大幅提升 Python 代码的简洁性和效率! 

http://www.xdnf.cn/news/1301941.html

相关文章:

  • QT(事件)
  • 【机器学习深度学习】客观评估训练程度
  • AIoT浪潮之巅:AI如何赋能边缘物联网,解锁三大核心潜能
  • Spring中存在两个相同的Bean是否会报错?
  • Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与学习体验增强中的应用(399)
  • STM32F103C8T6学习——直接存储器访问(DMA)标准库实战3(ADC数据采集+DMA回传)
  • 开始回溯的学习
  • I/O多路复用特性与实现
  • 【学习嵌入式day-25-线程】
  • 扣子(Coze),开源了!Dify 天塌了
  • 无人机智能跟踪模块设计与运行分析
  • Mac Mysql 卸载
  • 【Docker】openEuler 使用docker-compose部署gitlab-ce
  • C++设计模式:类间关系
  • 企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
  • Flinksql bug: Heartbeat of TaskManager with id container_XXX timed out.
  • gitee_流水线搭配 Dockerfile 部署vue项目
  • MetaFox官方版:轻松转换视频,畅享MKV格式的便捷与高效
  • 【Linux基础知识系列】第九十六篇 - 使用history命令管理命令历史
  • std::set_symmetric_difference
  • 4. 图像识别模型与训练策略
  • 解锁AI大模型:Prompt工程全面解析
  • Spring MVC ModelAndView 详解
  • Linux网络基础(一)
  • 【计算机视觉与深度学习实战】01基于直方图优化的图像去雾技术
  • Python入门第3课:Python中的条件判断与循环语句
  • 电商架构测试体系:ZKmall开源商城筑牢高并发场景下的系统防线
  • Dijkstra与Floyd求最短路算法简介
  • 【JAVA高级】实现word转pdf 实现,源码概述。深坑总结
  • Vue3 学习教程,从入门到精通,Axios 在 Vue 3 中的使用指南(37)