一、无限迭代器:突破循环边界
from itertools import count, cycle, repeat
# 无限计数器(从10开始,步长2)
for i in count(10, 2):
if i > 20: break
print(i, end=' ') # 输出:10 12 14 16 18 20
# 循环播放序列
print(list(zip(cycle('ABC'), range(5))))
# 输出:[('A',0), ('B',1), ('C',2), ('A',3), ('B',4)]
# 重复元素(指定次数)
print(list(repeat('*', 3))) # 输出:['*', '*', '*']
二、有限迭代器:智能数据处理
from itertools import accumulate, groupby, chain
# 累积计算(支持自定义函数)
data = [1, 2, 3, 4]
print(list(accumulate(data, lambda x,y: x*y)))
# 输出:[1, 2, 6, 24] (阶乘序列)
# 分组聚合(需先排序)
words = sorted(['apple', 'bat', 'atom', 'book'])
grouped = {k: list(v) for k,v in groupby(words, key=lambda x: x[0])}
print(grouped) # 输出:{'a':['apple','atom'], 'b':['bat','book']}
# 多序列扁平化
print(list(chain.from_iterable([[1,2], (3,4), 'ab'])))
# 输出:[1, 2, 3, 4, 'a', 'b']
三、组合生成器:解构复杂关系
from itertools import product, permutations, combinations
# 笛卡尔积(模拟嵌套循环)
print(list(product('AB', repeat=2)))
# 输出:[('A','A'), ('A','B'), ('B','A'), ('B','B')]
# 排列(顺序敏感)
print(list(permutations('XYZ', 2)))
# 输出:[('X','Y'), ('X','Z'), ('Y','X'), ('Y','Z'), ('Z','X'), ('Z','Y')]
# 组合(顺序无关)
print(list(combinations([1,2,3], 2)))
# 输出:[(1,2), (1,3), (2,3)]
四、性能优势与使用场景
- 惰性求值:迭代器按需生成数据,避免一次性加载海量数据
- 内存优化:相比列表操作,内存占用常数级(O(1))
- 代码简化:复杂循环可缩减为单行表达式
- 适用场景:大数据流处理、组合优化问题、状态机实现等
关键洞察:itertools.groupby要求输入序列已排序,否则相同键值的元素会被分割到不同组。务必先调用sorted()预处理数据!
掌握itertools能将繁琐的迭代逻辑转化为优雅的声明式代码,大幅提升开发效率。其函数式编程范式尤其适合处理现代数据管道任务,是Python开发者不可或缺的效能利器。
1772

被折叠的 条评论
为什么被折叠?



