Python 推导式详解

devtools/2025/3/15 10:05:10/

Python 推导式详解

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

一、列表推导式(List Comprehension)

语法[expression for item in iterable if condition]

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

示例

python"># 生成平方数列表
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}

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

示例

python"># 将列表转换为字典(元素作为键,平方作为值)
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}

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

示例

python"># 生成不重复的平方数
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)

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

示例

python"># 生成器逐个产生平方数
squares_gen = (x**2 for x in range(1000000))# 使用生成器求和(无需预存全部数据)
total = sum(x for x in range(10) if x % 2 == 0)  # 20

注意

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

五、嵌套推导式

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

示例

python"># 展平二维列表
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.ppmy.cn/devtools/167265.html

相关文章

C#设计模式Demo——MVC

设计模式Demo——MVC 1.View1.1页面示例1.2View代码1.3修改界面以及代码 2.Model3.Controller4.数据结构5枚举类型6.工具类6.1缓存信息6.2扩展类. 文件结构图 1.View 1.1页面示例 1.2View代码 using System; using System.Data; using System.Windows.Forms; using MVC模式…

词向量:优维大模型语义理解的深度引擎

★ 放闸溯源 优维大模型「骨架级」技术干货 第二篇 ⇓ 词向量是Transformer突破传统NLP技术瓶颈的核心,它通过稠密向量空间映射,将离散符号转化为连续语义表示。优维大模型基于词向量技术,构建了运维领域的“语义地图”,实现从…

便捷开启 PDF 功能之旅,绿色软件随心用

软件介绍 以往给大家推荐 DC 时,多是安装版本,这次可不一样,带来的是 DC 绿色版本,无需繁琐安装步骤,只需双击 exe 文件,就能快速打开软件,开启便捷的 PDF 处理之旅。 DC 这款软件功能极其丰富…

边缘计算(Edge Computing)

边缘计算(Edge Computing)是一种分布式计算范式,它将数据处理和存储功能从传统的集中式云端转移到靠近数据源的网络边缘设备(如路由器、网关、本地服务器或终端设备)。边缘计算的目标是减少数据传输延迟、降低带宽压力…

Redis项目_黑马点评

部署: 1. 导入sql 开发: Session登录: session的原理是cookie,每个session都有个唯一的sessionId, 在每次访问tomcat的时候sessionId就会自动的写在cookie当中, 携带着sessionId就能找到session, 所以不需要返回用户凭证 每一个进入tomcat的请求都是有一个独立的线程来处理…

Machine Learning中的模型选择

选择适合的机器学习模型是构建高效、准确模型的关键步骤。以下是决定选用哪个模型的主要考虑因素和步骤: 1. 明确问题类型 首先,明确你要解决的问题类型: 分类问题:预测离散类别(如垃圾邮件分类、图像识别&#xff09…

【C++项目】从零实现RPC框架「二」:项⽬设计

🌈 个人主页:Zfox_ 🔥 系列专栏:C++从入门到精通 目录 一:🚀 理解项⽬功能二:🔥 框架设计 🦋 服务端模块划分🎀 `Network`🎀 `Protocol`🎀 `Dispatcher`🎀 `RpcRouter`🎀 `Publish-Subscribe`🎀 `Registry-Discovery`🎀 `Server`🦋 客⼾端模块划…

YOLOv11融合[CVPR2025]ARConv中的自适应矩阵卷积

YOLOv11v10v8使用教程: YOLOv11入门到入土使用教程 YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 《Adaptive Rectangular Convolution for Remote Sensing Pansharpening》 一、 模块介绍 论文链接:https://arxiv.org/pdf/2503.00467 代…