Python基础教程(六十六)内建模块之itertools:解锁Python隐藏神器:itertools模块的高效魔法

一、无限迭代器:突破循环边界

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)]

四、性能优势与使用场景

  1. 惰性求值:迭代器按需生成数据,避免一次性加载海量数据
  2. 内存优化:相比列表操作,内存占用常数级(O(1))
  3. 代码简化:复杂循环可缩减为单行表达式
  4. 适用场景:大数据流处理、组合优化问题、状态机实现等

关键洞察itertools.groupby要求输入序列已排序,否则相同键值的元素会被分割到不同组。务必先调用sorted()预处理数据!

掌握itertools能将繁琐的迭代逻辑转化为优雅的声明式代码,大幅提升开发效率。其函数式编程范式尤其适合处理现代数据管道任务,是Python开发者不可或缺的效能利器。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值