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万条数据时,生成器只占“一个元素”的内存),适合处理大数据量!
五、生成器函数:用yield实现“分步返回”
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
类比:普通函数是“一次性把所有零食给你”,生成器函数是“每次给你一个零食”——适合“数据要分步处理”的场景(比如逐行读大文件)。
六、实战:用高级迭代处理CSV数据
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“优雅编程”的体现——用简洁的语法,解决复杂的循环问题!