高级迭代——疯狂地循环:Python循环的“偷懒&提速”技巧 🚀

307次阅读

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“优雅编程”的体现——用简洁的语法,解决复杂的循环问题!

正文完
 0