itertools模块是Python标准库中用于高效迭代操作的工具集合,其设计灵感源自函数式编程语言,强调内存效率和惰性计算。 以下是对其核心功能的分类解析及示例说明:
1. 合并与拆分迭代器chain()- 功能:将多个迭代器串联为一个连续迭代器。
- 示例:from itertools import chainfor i in chain([1, 2], ['a', 'b']): print(i, end=' ') # 输出:1 2 a b
- 应用场景:避免合并大列表,节省内存。
chain.from_iterable()- 功能:动态生成可迭代对象并串联(适用于延迟评估)。
- 示例:def gen(): yield [1, 2] yield ['a', 'b']for i in chain.from_iterable(gen()): print(i, end=' ') # 输出:1 2 a b
zip() vs zip_longest()- zip():以最短输入为准,组合多个迭代器为元组。
- zip_longest():以最长输入为准,缺失值填充None(可自定义)。
- 示例:from itertools import zip_longestlist(zip([1, 2], ['a'])) # [(1, 'a')]list(zip_longest([1, 2], ['a'], fillvalue='X')) # [(1, 'a'), (2, 'X')]
islice()- 功能:切片迭代器,支持start/stop/step参数(类似列表切片)。
- 示例:from itertools import islicelist(islice(range(10), 2, 5)) # [2, 3, 4]
tee()- 功能:将单个迭代器分裂为多个独立迭代器(默认2个)。
- 注意:分裂后不应再使用原迭代器,否则数据可能丢失。
- 示例:from itertools import teer = iter([1, 2, 3])a, b = tee(r)list(a), list(b) # ([1, 2, 3], [1, 2, 3])
2. 转换输入map()- 功能:对输入迭代器的每个元素应用函数,返回结果迭代器。
- 示例:list(map(lambda x: x*2, [1, 2])) # [2, 4]
starmap()- 功能:类似map(),但将可迭代对象的元素解包为函数参数。
- 示例:from itertools import starmaplist(starmap(pow, [(2,3), (3,2)])) # [8 (2^3), 9 (3^2)]
3. 生成新值count()- 功能:生成无限整数序列(可指定起始值和步长)。
- 示例:from itertools import countfor i in zip(count(10, 2), ['a', 'b']): print(i) # (10, 'a'), (12, 'b')
cycle()- 功能:无限循环迭代指定序列。
- 注意:需手动终止,否则内存可能耗尽。
- 示例:from itertools import cyclefor i in zip(range(5), cycle(['a', 'b'])): print(i) # (0, 'a'), (1, 'b'), (2, 'a'), ...
repeat()- 功能:重复生成同一值(可选指定次数)。
- 示例:from itertools import repeatlist(repeat(5, 3)) # [5, 5, 5]
4. 过滤与分组filterfalse()- 功能:保留使函数返回False的元素(与filter()相反)。
- 示例:from itertools import filterfalselist(filterfalse(lambda x: x%2==0, [1, 2, 3])) # [1, 3]
groupby()- 功能:根据键函数对连续相同元素分组。
- 注意:需先排序或确保相同元素相邻。
- 示例:from itertools import groupbyfor k, g in groupby('AAABBBCC'): print(k, list(g)) # A ['A','A','A'], B ['B','B','B'], ...
5. 组合输入product()- 功能:计算多个迭代器的笛卡尔积(等价于嵌套循环)。
- 示例:from itertools import productlist(product('AB', [1, 2])) # [('A',1), ('A',2), ('B',1), ('B',2)]
permutations() / combinations()- 功能:生成排列(考虑顺序)或组合(不考虑顺序)。
- 示例:from itertools import permutationslist(permutations('ABC', 2)) # [('A','B'), ('A','C'), ('B','A'), ...]
关键优势- 惰性计算:仅在需要时生成数据,节省内存。
- 组合灵活:通过管道式组合实现复杂迭代逻辑。
- 性能高效:避免中间列表的创建,适合大数据处理。
通过掌握这些工具,可以显著提升代码的简洁性与执行效率,尤其在处理流式数据或大规模迭代时。