当前位置: 首页 > 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.dtcms.com/a/333637.html

相关文章:

  • 基本电子元件:碳膜电阻器
  • 代码随想录二刷之“字符串”~GO
  • 集合车位租售、充电桩共享、二手市场、便民服务的家政服务平台,带源码
  • 数说故事发布全新AI产品:Social Research,免费洞察各行各业趋势,提升营销效率
  • 20250815日记
  • 智慧零碳园区——解读2025 零碳产业园区实施路径规划【附全文阅读】
  • pytorch学习笔记-模型的保存与加载(自定义模型、网络模型)
  • 大白话解析 Solidity 中的防重放参数
  • USENIX Security ‘24 Fall Accepted Papers (1)
  • 归并排序和统计排序
  • 用matlab实现的svdd算法
  • 2025年机械制造、机器人与计算机工程国际会议(MMRCE 2025)
  • gnu arm toolchain中的arm-none-eabi-gdb.exe的使用方法?
  • C#WPF实战出真汁05--左侧导航
  • 日常反思总结
  • 异步开发:协程、线程、Unitask
  • 线性代数 · 直观理解矩阵 | 空间变换 / 特征值 / 特征向量
  • 树莓派开机音乐
  • 模板引用(Template Refs)全解析2
  • CVE-2025-8088复现
  • 汽车行业 AI 视觉检测方案(二):守护车身密封质量
  • 【总结】Python多线程
  • 华清远见25072班C语言学习day10
  • 342. 4的幂
  • 自定义数据集(pytorchhuggingface)
  • 附046.集群管理-EFK日志解决方案-Filebeat
  • 考研复习-计算机组成原理-第七章-IO
  • NumPy基础入门
  • 第40周——GAN入门
  • 详解区块链技术及主流区块链框架对比