Python语法系列博客 · 第7期[特殊字符] 列表推导式与字典推导式:更优雅地处理数据结构

上一期小练习解答(第6期回顾)

✅ 练习1:统计文件行数
python 复制代码
with open("data.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    print(f"总行数:{len(lines)}")

✅ 练习2:反转每行写入新文件

python 复制代码
with open("data.txt", "r", encoding="utf-8") as f_in, open("reversed.txt", "w", encoding="utf-8") as f_out:
    for line in f_in:
        f_out.write(line.strip()[::-1] + "\n")

✅ 练习3:筛选以 "A" 开头的名字

python 复制代码
with open("names.txt", "r", encoding="utf-8") as f_in, open("a_names.txt", "w", encoding="utf-8") as f_out:
    for name in f_in:
        if name.strip().startswith("A"):
            f_out.write(name)

本期主题:列表推导式与字典推导式


🟦 7.1 什么是推导式?

推导式(Comprehensions)是 Python 中优雅、高效的语法糖,用于快速生成列表、集合或字典。

7.2 列表推导式(List Comprehension)

✅ 基本语法:
python 复制代码
[表达式 for 变量 in 可迭代对象 if 条件]

示例1:平方一个列表中的所有元素

python 复制代码
nums = [1, 2, 3, 4, 5]
squares = [x**2 for x in nums]
print(squares)  # [1, 4, 9, 16, 25]

示例2:筛选出偶数

python 复制代码
evens = [x for x in nums if x % 2 == 0]
print(evens)  # [2, 4]

示例3:嵌套循环(乘法表)

python 复制代码
table = [(i, j, i*j) for i in range(1, 4) for j in range(1, 4)]
print(table)  # [(1,1,1), (1,2,2), ..., (3,3,9)]

7.3 字典推导式(Dict Comprehension)

✅ 基本语法:
python 复制代码
{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}

示例1:创建键为数值、值为其平方的字典

python 复制代码
squares = {x: x**2 for x in range(5)}
print(squares)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

示例2:过滤字典中值大于 10 的项

python 复制代码
d = {'a': 5, 'b': 12, 'c': 7}
filtered = {k: v for k, v in d.items() if v > 10}
print(filtered)  # {'b': 12}

7.4 集合推导式(Set Comprehension)

与列表推导式类似,只是使用 {} 生成集合:

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

小技巧对比:传统写法 vs 推导式

传统写法:

python 复制代码
result = []
for i in range(10):
    if i % 2 == 0:
        result.append(i)

推导式写法:

python 复制代码
result = [i for i in range(10) if i % 2 == 0]

推导式更加简洁、表达意图明确,是 Pythonic 写法的重要体现。

本期小练习

  1. 使用列表推导式生成所有 1~100 中能被 3 或 5 整除的数。

  2. 给定一个字符串列表 ["apple", "banana", "grape"],生成一个字典,其键为字符串,值为长度。

  3. 创建一个乘法字典:键为 (i, j),值为 i * j,其中 ij 范围为 1~5。

  4. 用集合推导式找出一个列表中所有唯一的偶数。

本期小结

  • 学习了 推导式的三种形式:列表、字典、集合

  • 熟悉了它们的 基本语法和使用场景

  • 掌握了通过 条件语句和嵌套循环 构建复杂数据结构的方法

第8期预告:

下一期我们将讲解:

  • 匿名函数 lambda

  • 函数作为参数传递

  • 内置高阶函数:map()filter()reduce()

  • 函数式编程初体验!

相关推荐
蓝婷儿12 分钟前
Python 爬虫入门 Day 2 - HTML解析入门(使用 BeautifulSoup)
爬虫·python·html
早起鸟儿15 分钟前
docker-Dockerfile 配置
java·linux·运维·docker
云边小网安19 分钟前
java集合篇(六) ---- ListIterator 接口
java·开发语言·青少年编程·java集合
都叫我大帅哥25 分钟前
Spring WebFlux:响应式编程的“未来战士”还是“花架子”?
java·spring·flux
都叫我大帅哥27 分钟前
Reactor 深度解析:响应式编程的「核反应堆」是如何工作的?
java·spring
不太厉害的程序员27 分钟前
NC65配置xml找不到Bean
xml·java·后端·eclipse
GalaxyPokemon32 分钟前
LeetCode - 704. 二分查找
数据结构·算法·leetcode
struggle20251 小时前
Burn 开源程序是下一代深度学习框架,在灵活性、效率和可移植性方面毫不妥协
人工智能·python·深度学习·rust
腾飞开源1 小时前
17_Flask部署到网络服务器
python·flask·python web开发·flask快速入门教程·flask框架·flask视频教程·flask会话技术
我在北国不背锅1 小时前
基于Java开发的浏览器自动化Playwright-MCP服务器
java·playwright·mcp