Python编程实战 · 基础入门篇 | 推导式(列表推导式 / 字典推导式)

在学习了循环与条件判断后,你可能已经编写过很多这样的代码:

python 复制代码
result = []
for i in range(1, 6):
    result.append(i * i)
print(result)

输出:

csharp 复制代码
[1, 4, 9, 16, 25]

没错,这段代码实现了平方数列表,但显得冗长。 在 Python 中,有一种更优雅 、更高效 的写法------推导式(Comprehension)


一、什么是推导式

推导式是一种简洁的序列生成语法,用一行代码即可实现循环、条件判断和数据构建。

Python 支持多种推导式:

类型 作用 示例
列表推导式 快速生成列表 [x*x for x in range(5)]
字典推导式 快速生成字典 {x: x*x for x in range(5)}
集合推导式 快速生成集合 {x*x for x in range(5)}
生成器表达式 生成迭代器 (x*x for x in range(5))

本章重点讲解 列表推导式字典推导式


二、列表推导式(List Comprehension)

1. 基本语法

python 复制代码
[表达式 for 变量 in 可迭代对象]

相当于:

python 复制代码
result = []
for 变量 in 可迭代对象:
    result.append(表达式)

2. 示例:生成平方数列表

python 复制代码
squares = [x * x for x in range(1, 6)]
print(squares)

输出:

csharp 复制代码
[1, 4, 9, 16, 25]

相比传统循环,代码更加简洁清晰。


3. 添加条件判断

可以在推导式中加入条件过滤,只保留满足条件的元素。

python 复制代码
even_squares = [x * x for x in range(1, 10) if x % 2 == 0]
print(even_squares)

输出:

csharp 复制代码
[4, 16, 36, 64]

✅ 这相当于"先循环,再筛选",写法紧凑但逻辑清晰。


4. 嵌套循环

推导式支持嵌套循环(类似双层 for 循环)。

python 复制代码
pairs = [(x, y) for x in [1, 2, 3] for y in ['A', 'B']]
print(pairs)

输出:

css 复制代码
[(1, 'A'), (1, 'B'), (2, 'A'), (2, 'B'), (3, 'A'), (3, 'B')]

相当于:

python 复制代码
pairs = []
for x in [1, 2, 3]:
    for y in ['A', 'B']:
        pairs.append((x, y))

5. 条件 + 嵌套

推导式可以在嵌套循环中加入条件:

python 复制代码
pairs = [(x, y) for x in range(1, 4) for y in range(1, 4) if x != y]
print(pairs)

输出:

css 复制代码
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

6. 字符串处理案例

将一句话中的单词全部转换为大写:

python 复制代码
text = "python is powerful"
upper_words = [word.upper() for word in text.split()]
print(upper_words)

输出:

css 复制代码
['PYTHON', 'IS', 'POWERFUL']

三、字典推导式(Dict Comprehension)

字典推导式与列表推导式类似,只不过生成的是键值对结构。

1. 基本语法

python 复制代码
{键表达式: 值表达式 for 变量 in 可迭代对象}

2. 示例:数字与平方的映射

python 复制代码
squares = {x: x * x for x in range(1, 6)}
print(squares)

输出:

yaml 复制代码
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

3. 添加条件过滤

python 复制代码
even_squares = {x: x * x for x in range(1, 10) if x % 2 == 0}
print(even_squares)

输出:

yaml 复制代码
{2: 4, 4: 16, 6: 36, 8: 64}

4. 翻转字典的键与值

python 复制代码
data = {"A": 1, "B": 2, "C": 3}
reversed_dict = {v: k for k, v in data.items()}
print(reversed_dict)

输出:

css 复制代码
{1: 'A', 2: 'B', 3: 'C'}

5. 实战:学生成绩筛选

python 复制代码
scores = {"张三": 85, "李四": 90, "王五": 58, "赵六": 76}
passed = {name: score for name, score in scores.items() if score >= 60}
print(passed)

输出:

arduino 复制代码
{'张三': 85, '李四': 90, '赵六': 76}

✅ 字典推导式在数据过滤、重组时非常实用。


四、集合推导式(补充)

集合推导式语法与列表推导式类似,只需用 {} 包裹:

python 复制代码
unique_squares = {x * x for x in [1, 2, 2, 3, 3, 4]}
print(unique_squares)

输出:

复制代码
{16, 1, 4, 9}

集合自动去重,非常适合提取唯一值。


五、推导式的性能优势

推导式不仅让代码更简洁,还能在大多数场景下执行更快。 因为它们由 Python 内部进行了优化,减少了函数调用的开销。

python 复制代码
import time

# 普通循环
start = time.time()
result = []
for i in range(1000000):
    result.append(i * 2)
print("普通循环耗时:", time.time() - start)

# 推导式
start = time.time()
result = [i * 2 for i in range(1000000)]
print("推导式耗时:", time.time() - start)

通常情况下,推导式的执行速度更快。


六、推导式使用注意事项

  1. 不要滥用: 过于复杂的嵌套推导式会让代码难以阅读。 例如三层以上循环就应考虑使用普通循环结构。

  2. 注意内存占用 : 列表推导式会一次性生成所有数据; 如果数据量很大,可改用生成器表达式 (用圆括号 ())。


七、小结

推导式类型 语法形式 作用
列表推导式 [表达式 for 变量 in 可迭代对象 if 条件] 快速生成列表
字典推导式 {键: 值 for 变量 in 可迭代对象 if 条件] 快速生成字典
集合推导式 {表达式 for 变量 in 可迭代对象} 自动去重
生成器表达式 (表达式 for 变量 in 可迭代对象) 延迟计算,节省内存

✅ 一句话总结

推导式让 Python 代码更"像 Python"------简洁、优雅又高效。

相关推荐
天天爱吃肉82182 分钟前
【跨界封神|周杰伦×王传福(陶晶莹主持):音乐创作与新能源NVH测试,底层逻辑竟完全同源!(新人必看入行指南)】
python·嵌入式硬件·算法·汽车
岱宗夫up15 分钟前
Python 数据分析入门
开发语言·python·数据分析
码界筑梦坊17 分钟前
325-基于Python的校园卡消费行为数据可视化分析系统
开发语言·python·信息可视化·django·毕业设计
asheuojj20 分钟前
2026年GEO优化获客效果评估指南:如何精准衡量TOP5关
大数据·人工智能·python
多恩Stone20 分钟前
【RoPE】Flux 中的 Image Tokenization
开发语言·人工智能·python
李日灐23 分钟前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
网安墨雨38 分钟前
Python自动化一------pytes与allure结合生成测试报告
开发语言·自动化测试·软件测试·python·职场和发展·自动化
powerfulhell1 小时前
寒假python作业5
java·前端·python
铉铉这波能秀1 小时前
LeetCode Hot100 中 enumerate 函数的妙用(2026.2月版)
数据结构·python·算法·leetcode·职场和发展·开发
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 基于python的电影推荐系统为例,包含答辩的问题和答案
开发语言·python