恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Python 推导式完全指南

  • 首页
  • 资讯中心
  • /
  • Python 推导式完全指南

相关资讯

API中转站低代码接入:非技术团队也需要规则 2026/8/2 19:17:52
C++图像雾化效果实现:从原理到工程优化的完整指南 2026/8/2 19:17:52
树状结构在查询优化中的作用与实现细节7 2026/8/2 19:17:53

最新资讯

VR产品总监实战指南:从体验基线到跨团队流程优化
STM32 USB 2.0接口防护设计:TVS管选型、PCB布局与ESD测试实操指南
Qwen3.8-27B魔改实录:5.9GB本地部署全链路优化
claude-mem:给Claude装上跨会话持久记忆的MCP实践指南
直流有刷电机驱动板设计:H桥原理、驱动芯片选型与硬件调试实战
PostgreSQL + pgvector 实现 RAG 语义搜索:从零搭建与调优

今日推荐

SSD不认盘怎么修?金士顿SV300板级排查与短接ROM进工厂模式
Unity 3D RPG开发:C#状态机与物理更新时机实战指南
AIoT开发工程师岗位全景:从嵌入式Linux到边缘计算与端侧AI部署

本周热门

MR25H40CDF + PIC18F65K40:工业记录仪高可靠存储实战
基于STM32的数控恒压恒流电源设计:从硬件到PID调参全解析
LT9211 MIPI重定时器原理与双路扇出实战指南

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Python 推导式完全指南

发布时间:2026/10/7 22:04:27
Python 推导式完全指南 一、推导式语法结构1.1 基本组成推导式由三个核心部分组成第一部分表达式对每个元素进行的操作或计算结果这个表达式决定了最终生成的元素是什么样子。第二部分循环体遍历可迭代对象的循环语句用于取出每个元素进行处理。第三部分条件语句可选的过滤条件只有满足条件的元素才会被保留不满足条件的会被过滤掉。1.2 语法格式完整语法格式和不带条件的简化语法1.3 各部分说明表达式可以是简单的变量也可以是复杂的运算或函数调用for 变量 in 可迭代对象遍历获取每个元素if 条件可选部分用于筛选符合条件的元素1.4 代码示例完整语法带条件result, [i for i in range(10) if i % 2 0] # 结果[0, 2, 4 6, 8]简化语法不带条件result [i**2 for i in range(5)] # 结果[0, 1, 4, 9, 16]二、列表推导式2.1 基本用法# 传统方式3行 result [] for i in range(10): if i % 2 0: result.append(i) print(result) # [0, 2, 4, 6, 8] # 列表推导式1行 result [i for i in range(10) if i % 2 0] print(result) # [0, 2, 4, 6, 8]2.2 常见示例# 1. 生成1-100的奇数 odd [i for i in range(1, 100) if i % 2] print(odd) # [1, 3, 5, ..., 99] # 2. 平方数列表 squares [i**2 for i in range(10)] print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # 3. 字符串处理 words [hello, world, python] upper_words [word.upper() for word in words] print(upper_words) # [HELLO, WORLD, PYTHON] # 4. 带条件过滤 numbers [1, 2, 3, 4, 5, 6, 7, 8] even [x for x in numbers if x % 2 0] print(even) # [2, 4, 6, 8]2.3 多层循环# 传统方式 result [] for x in range(3): for y in range(3): result.append((x, y)) # 推导式 result [(x, y) for x in range(3) for y in range(3)] print(result) # [(0,0), (0,1), (0,2), (1,0), (1,1), ...]2.4 if-else 表达式# 先if后else在表达式中使用 result [x if x % 2 0 else -x for x in range(10)] print(result) # [0, -1, 2, -3, 4, -5, 6, -7, 8, -9] # 后置if仅过滤 result [x for x in range(10) if x % 2 0] print(result) # [0, 2, 4, 6, 8]三、元组推导式生成器元组推导式返回的是生成器对象而不是元组。# ❌ 错误这不是元组推导式 t (i for i in range(10)) # 这是生成器 print(type(t)) # class generator # ✅ 正确使用 tuple() 转换为元组 t tuple(i for i in range(10)) print(type(t)) # class tuple3.1 生成器的优势# 列表占用大量内存 lst [i for i in range(100000)] print(lst.__sizeof__()) # 较大内存 # 生成器几乎不占用内存 gen (i for i in range(100000)) print(gen.__sizeof__()) # 很小内存 # 生成器不能使用索引 # print(gen[0]) # ❌ TypeError # 只能遍历一次 for item in gen: print(item) break # 只能从头开始遍历3.2 内存对比# 列表内存占用 list_data [i for i in range(1000)] print(f列表占用: {list_data.__sizeof__()} bytes) # 生成器内存占用 gen_data (i for i in range(1000)) print(f生成器占用: {gen_data.__sizeof__()} bytes) # 输出示例 # 列表占用: 8856 bytes # 生成器占用: 112 bytes四、字典推导式字典推导式返回dict表达式必须是key: value形式。# 基本语法 {key_expression: value_expression for item in iterable if condition}4.1 基本用法# 1. 键值互换 d {a: 1, b: 2, c: 3} new_d {v: k for k, v in d.items()} print(new_d) # {1: a, 2: b, 3: c} # 2. 对值进行操作 d {a: 1, b: 2, c: 3} new_d {k: v**2 for k, v in d.items()} print(new_d) # {a: 1, b: 4, c: 9} # 3. 带条件过滤 d {a: 1, b: 2, c: 3, d: 4} new_d {k: v for k, v in d.items() if v % 2 0} print(new_d) # {b: 2, d: 4} # 4. 从列表创建字典 keys [name, age, city] values [张三, 20, 北京] d {k: v for k, v in zip(keys, values)} print(d) # {name: 张三, age: 20, city: 北京}4.2 zip() 配合使用keys [a, b, c, d] values [1, 2, 3, 4] # 传统方式 d {} for i in range(len(keys)): d[keys[i]] values[i] # 推导式 zip() d {k: v for k, v in zip(keys, values)} print(d) # {a: 1, b: 2, c: 3, d: 4}五、集合推导式集合推导式返回set表达式是单个元素自动去重。# 基本语法 {expression for item in iterable if condition}5.1 基本用法# 1. 生成集合自动去重 s {i % 3 for i in range(10)} print(s) # {0, 1, 2} # 2. 平方数集合 squares {i**2 for i in range(5)} print(squares) # {0, 1, 4, 9, 16} # 3. 带条件 s {i for i in range(10) if i % 2 0} print(s) # {0, 2, 4, 6, 8} # 4. 字符串处理 words [hello, world, python, hello] unique_lengths {len(word) for word in words} print(unique_lengths) # {5, 6}自动去重六、enumerate() 与 zip()6.1 enumerate()获取索引和值# 传统方式 names [a, b, c, d] for i in range(len(names)): print(i, names[i]) # enumerate方式推荐 for index, name in enumerate(names): print(index, name) # 推导式中使用 pairs [(i, name) for i, name in enumerate(names)] print(pairs) # [(0, a), (1, b), (2, c), (3, d)]6.2 zip()并行遍历多个序列keys [a, b, c, d] values [1, 2, 3, 4] # 传统方式 for i in range(len(keys)): print(keys[i], values[i]) # zip方式推荐 for key, value in zip(keys, values): print(key, value) # 推导式中使用 d {k: v for k, v in zip(keys, values)} print(d) # {a: 1, b: 2, c: 3, d: 4} # 多个序列 names [张三, 李四, 王五] ages [20, 22, 19] cities [北京, 上海, 广州] result [{name: n, age: a, city: c} for n, a, c in zip(names, ages, cities)] print(result)七、性能对比import time # 传统循环 vs 推导式 n 1000000 # 传统方式 start time.time() result [] for i in range(n): if i % 2 0: result.append(i) print(f循环耗时: {time.time() - start:.4f}s) # 推导式 start time.time() result [i for i in range(n) if i % 2 0] print(f推导式耗时: {time.time() - start:.4f}s) # 输出示例 # 循环耗时: 0.1234s # 推导式耗时: 0.0789s更快

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号