高级特性:列表 / 集合 / 字典推导式
🧩 为什么需要推导式?
在实际开发中,我们常常会这样操作:
- 根据已有数据生成一个新列表
- 对一组数据进行条件筛选或转换
- 构造映射关系(键值对)
传统做法往往需要循环语句,代码冗长。而推导式(comprehension)提供了更简洁、优雅的写法,让你用一行代码完成数据结构的构建。
🟦 一、列表推导式(List Comprehension)
✅ 基本语法:
[表达式 for 变量 in 可迭代对象 if 条件]
📘 示例 1:生成平方数列表
平方数 = [x * x 循环 x 在 范围(1, 6)]
打印(平方数) # [1, 4, 9, 16, 25]
📘 示例 2:筛选偶数
偶数 = [x 循环 x 在 范围(10) 如果 x % 2 == 0]
打印(偶数) # [0, 2, 4, 6, 8]
🟩 二、集合推导式(Set Comprehension)
✅ 基本语法:
{表达式 for 变量 in 可迭代对象 if 条件}
集合自动去重,适合统计不重复元素。
📘 示例:字符串中不重复的大写字母
文本 = "Hello World"
大写字母 = {字母.上限() 循环 字母 在 文本 如果 字母.是否字母()}
打印(大写字母) # {'H', 'E', 'L', 'O', 'W', 'R', 'D'}
🟨 三、字典推导式(Dict Comprehension)
✅ 基本语法:
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
用于快速构建键值映射。
📘 示例 1:映射数字到平方
平方映射 = {x: x * x 循环 x 在 迭代器(1, 6)}
打印(平方映射) # {1:1, 2:4, 3:9, 4:16, 5:25}
📘 示例 2:反转字典
原始 = {"a": 1, "b": 2}
反转 = {值: 键 循环 键, 值 在 原始.项目()}
打印(反转) # {1: 'a', 2: 'b'}
⚠️ 注意事项
- 表达式越简单,推导式越易读。
- 可以嵌套使用,但不推荐超过两层。
- 如果逻辑复杂,建议使用常规
for循环替代推导式。
✅ 小结
| 类型 | 语法 | 说明 |
|---|---|---|
| 列表推导式 | [x for x in 可迭代对象] | 返回列表,保留重复值 |
| 集合推导式 | {x for x in 可迭代对象} | 返回集合,自动去重 |
| 字典推导式 | {k: v for k, v in ...} | 返回字典结构 |