1. 普通循环的痛点:代码又长又慢 🤦♀️
写普通
for 循环时,经常会出现“啰嗦”的代码——比如“把列表里的数都平方”:
# 普通循环:3 行代码
nums = [1,2,3,4]
result = []
for num in nums:
result.append(num * num)
print(result) # [1,4,9,16]
不仅代码长,大量循环还会成为 效率瓶颈(比如处理 100 万条数据时,普通循环会很慢)。
高级迭代就是 Python 给的“偷懒工具”——用更简洁的语法写循环,还能让代码跑得更快!
2. 列表推导式:循环的“压缩饼干”🍪
关键字:列表推导式、语法格式、简洁性
内容详解:
列表推导式用一行代码实现“循环 + 数据处理 + 生成列表”,格式是[处理逻辑 for 元素 in 可迭代对象]。比如前面的“平方列表”:
nums = [1,2,3,4]
# 列表推导式:1 行搞定
result = [num * num for num in nums]
print(result) # [1,4,9,16]
还能加 条件过滤(格式:[处理逻辑 for 元素 in 可迭代对象 if 条件])——比如“取偶数的平方”:
nums = [1,2,3,4,5,6]
# 只处理偶数
result = [num * num for num in nums if num % 2 == 0]
print(result) # [4,16,36]
类比:普通循环是“煮一碗面(要烧水、下面、调味)”,列表推导式是“泡一碗泡面(热水一冲就好)”——又快又省事儿!
3. 字典推导式:键值对的“批量生产线”🏭
关键字:字典推导式、键值对生成
内容详解:
把列表推导式的 [] 换成 {},就能生成字典——格式是{键: 值 for 元素 in 可迭代对象}。比如“把列表转成{元素: 元素平方} 的字典”:
nums = [1,2,3,4]
# 字典推导式:生成键值对
num_dict = {num: num * num for num in nums}
print(num_dict) # {1:1, 2:4, 3:9, 4:16}
也能加条件过滤——比如“只生成偶数的字典”:
num_dict = {num: num * num for num in nums if num % 2 == 0}
print(num_dict) # {2:4, 4:16}
这在处理 CSV 数据、批量生成配置字典时超有用!
4. 生成器:不占内存的“懒迭代”🦥
关键字:生成器、小括号语法、内存优化
内容详解:
列表推导式会 一次性生成所有数据 (比如生成 100 万个数的列表,会占很多内存)。而生成器是“用一个取一个”的“懒迭代”——把列表推导式的[] 换成 () 即可:
# 生成器:小括号,不会一次性生成数据
gen = (num * num for num in range(1000000))
print(gen) # <generator object <genexpr> at 0x...>(不是列表)# 用 next()取数据,取一个生成一个
print(next(gen)) # 0
print(next(gen)) # 1
print(next(gen)) # 4
生成器的优势是 节省内存(处理 100 万条数据时,生成器只占“一个元素”的内存),适合处理大数据量!
5. 生成器函数:能“暂停”的函数 ⏸️
关键字:生成器函数、yield 语句、分步迭代
内容详解:
用 yield 代替 return 的函数,就是“生成器函数”——调用时不会直接执行,而是返回生成器对象,每次 next() 会执行到 yield 处暂停,返回值。比如“生成斐波那契数列”:
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a # 暂停,返回 a
a, b = b, a + b
# 调用生成器函数,得到生成器
fib_gen = fib(5)
# 分步取数据
print(next(fib_gen)) # 0
print(next(fib_gen)) # 1
print(next(fib_gen)) # 1
print(next(fib_gen)) # 2
print(next(fib_gen)) # 3
类比:普通函数是“一次性把所有零食给你”,生成器函数是“每次给你一个零食”——适合“数据要分步处理”的场景(比如逐行读大文件)。
6. 实战:CSV 数据的“高效处理”📊
关键字:CSV 处理、推导式 + 生成器、大数据量
内容详解:
处理 CSV 数据时,高级迭代能让代码更简洁、更省内存。比如“读取 CSV 文件,转成字典列表”:
import csv
# 用生成器逐行读 CSV(不占内存)def read_csv_gen(file_path):
with open(file_path, "r", encoding="utf-8") as f:
reader = csv.DictReader(f) # 按列名生成字典
for row in reader:
yield row # 逐行返回,不一次性加载
# 用列表推导式过滤数据(取年龄 >18 的行)adult_data = [row for row in read_csv_gen("data.csv") if int(row["age"]) > 18]
print(adult_data) # 只包含成年人的字典列表
这样处理 1GB 的 CSV 文件,也不会占满内存——生成器负责“懒读”,推导式负责“快速过滤”,完美解决大数据问题!
7. 划重点:高级迭代的“双 buff”🎯
关键字:代码简洁、效率提升、内存优化
内容详解:
高级迭代(推导式、生成器)的核心优势是“两快一省”:
- 📝 写得快:一行代码代替多行循环,减少冗余;
- 🏃 跑得快 :推导式是 Python 内部优化的循环,比普通
for循环效率高; - 💾 省内存:生成器“用一个取一个”,适合大数据量处理。
这也是 Python“优雅编程”的体现——用简洁的语法,解决复杂的循环问题!