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

Python 推导式详解

Python 推导式详解

Python 推导式(Comprehension)是一种简洁高效的语法结构,用于快速生成列表、字典、集合等数据结构。它通过一行代码替代传统的多行循环,使代码更简洁易读。以下是常见的推导式类型及用法详解:

一、列表推导式(List Comprehension)

语法[expression for item in iterable if condition]

作用:生成列表,可包含条件过滤和多重循环。

示例

# 生成平方数列表
squares = [x**2 for x in range(5)]  # [0, 1, 4, 9, 16]

# 筛选偶数
evens = [x for x in range(10) if x % 2 == 0]  # [0, 2, 4, 6, 8]

# 双重循环(笛卡尔积)
pairs = [(a, b) for a in [1, 2] for b in ['x', 'y']]
# 结果:[(1, 'x'), (1, 'y'), (2, 'x'), (2, 'y')]

注意

  • 可以嵌套多个 for 循环和 if 条件。
  • 复杂逻辑建议改用普通循环,避免降低可读性。

二、字典推导式(Dict Comprehension)

语法{key_expr: value_expr for item in iterable if condition}

作用:快速生成字典,常用于键值对转换。

示例

# 将列表转换为字典(元素作为键,平方作为值)
d = {x: x**2 for x in [1, 2, 3]}  # {1: 1, 2: 4, 3: 9}

# 交换键值对
original = {'a': 1, 'b': 2}
swapped = {v: k for k, v in original.items()}  # {1: 'a', 2: 'b'}

# 合并两个列表为字典
keys = ['name', 'age']
values = ['Alice', 30]
data = {k: v for k, v in zip(keys, values)}  # {'name': 'Alice', 'age': 30}

注意

  • 键必须唯一,重复键会覆盖原有值。

三、集合推导式(Set Comprehension)

语法{expression for item in iterable if condition}

作用:生成无序且元素唯一的集合,自动去重。

示例

# 生成不重复的平方数
unique_squares = {x**2 for x in [1, -1, 2, -2]}  # {1, 4}

# 筛选长度大于3的字符串
words = {"apple", "bat", "cat"}
long_words = {word for word in words if len(word) > 3}  # {'apple'}

四、生成器表达式(Generator Expression)

语法(expression for item in iterable if condition)

特点:惰性计算,逐个生成元素,节省内存,适合处理大数据。

示例

# 生成器逐个产生平方数
squares_gen = (x**2 for x in range(1000000))

# 使用生成器求和(无需预存全部数据)
total = sum(x for x in range(10) if x % 2 == 0)  # 20

注意

  • 生成器只能用一次,遍历后即耗尽。

五、嵌套推导式

推导式可以嵌套使用,处理多维数据结构。

示例

# 展平二维列表
matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [num for row in matrix for num in row]  # [1, 2, 3, 4, 5, 6]

# 转置矩阵
transposed = [[row[i] for row in matrix] for i in range(2)]
# 结果:[[1, 3, 5], [2, 4, 6]]

六、使用建议

  • 简洁性:适合简单逻辑,复杂操作建议拆分为多行。
  • 性能:推导式通常比普通循环快,但生成器更省内存。
  • 可读性:避免多层嵌套或过多条件,确保代码易于理解。
类型语法输出特点
列表推导式[x for x in ...]列表有序,可重复
字典推导式{k: v for ...}字典键值对,键唯一
集合推导式{x for x in ...}集合无序,元素唯一
生成器(x for x in ...)生成器惰性计算,节省内存

掌握推导式可以大幅提升代码简洁性,但需根据场景权衡可读性与效率。


http://www.kler.cn/a/585984.html

相关文章:

  • MySQL学习笔记(4)三大日志
  • 基于Matlab设计GUI图像处理交互界面
  • 计算机网络基础:网络安全基础
  • python-leetcode-删掉一个元素以后全为 1 的最长子数组
  • 将docker images导入crictl images
  • 基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析
  • uniapp页面跳转带参数获取,需要注意在小程序和web下是不一样的
  • 网络爬虫相关
  • DeepLabv3+改进10:在主干网络中添加LSKBlock|动态调整其大型空间感受野,助力小目标识别
  • element-plus中Autocomplete自动补全输入框组件的使用
  • 硬件工程师入门教程(四)
  • linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序
  • 解决Docker Desktop中ext4.vhdx文件过大的问题
  • 【Java 进阶实战】一 学习成果检验
  • 《大语言模型》学习笔记(一)
  • 初探大模型开发:使用 LangChain 和 DeepSeek 构建简单 Demo
  • Apache Doris中都用了哪些开发语言,编译过程中用到了哪些编译器,以及用到了哪些成熟的技术框架
  • 支持Linux、鸿蒙的工业AIOT智能终端在钢铁厂的应用
  • JavaScript性能优化实战:从8s到0.8s的极致提升
  • 钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛