2023-12-26 07:29:38
itertools是Python中一个功能强大的内置库,提供了多种用于高效循环和组合操作的迭代器工具。这些工具不仅简化了代码编写,还通过延迟计算和内存高效的方式提升了程序性能。以下是itertools库的核心功能解析:
1. 核心优势count(start=0, step=1)生成无限序列,支持自定义起始值和步长。
itertools.count(start=20, step=-1) # 20, 19, 18, ...cycle(iterable)循环遍历可迭代对象,无限重复。
itertools.cycle('ABC') # A, B, C, A, B, C, ...repeat(value, times=None)重复单个值,可选次数限制。
itertools.repeat(0, 5) # 0, 0, 0, 0, 0accumulate(iterable, func=operator.add)累加或自定义二元操作(如乘法)。
itertools.accumulate([1, 2, 3], func=lambda x, y: x*y) # 1, 2, 6chain(*iterables)串联多个可迭代对象,扁平化输出。
itertools.chain([1, 2], [3, 4]) # 1, 2, 3, 4islice(iterable, start, stop, step)对迭代器切片,类似列表切片但更高效。
itertools.islice(range(10), 2, 8, 2) # 2, 4, 6product(*iterables, repeat=1)计算多个可迭代对象的笛卡尔积。
itertools.product('AB', [1, 2]) # ('A',1), ('A',2), ('B',1), ('B',2)permutations(iterable, r=None)生成所有长度为r的排列(顺序敏感)。
itertools.permutations('AB', 2) # ('A','B'), ('B','A')combinations(iterable, r)生成无重复组合(顺序无关)。
itertools.combinations('AB', 2) # ('A','B')combinations_with_replacement允许重复元素的组合。
itertools.combinations_with_replacement('AB', 2) # ('A','A'), ('A','B'), ('B','B')compress(data, selectors)根据布尔选择器过滤数据。
itertools.compress('ABC', [1, 0, 1]) # 'A', 'C'dropwhile(predicate, iterable)跳过满足条件的初始元素。
itertools.dropwhile(lambda x: x < 3, [1, 2, 3, 4]) # 3, 4takewhile(predicate, iterable)取满足条件的初始元素。
itertools.takewhile(lambda x: x < 3, [1, 2, 3, 4]) # 1, 2filterfalse(predicate, iterable)保留不满足条件的元素。
itertools.filterfalse(lambda x: x % 2 == 0, [1, 2, 3]) # 1, 3groupby(iterable, key=None)按键函数分组连续相同元素。
for k, g in itertools.groupby('AAAABBBCCD'): # 'A': 'AAAA', 'B': 'BBB', etc.starmap(function, iterable)类似map,但参数为元组解包。
itertools.starmap(pow, [(2,3), (3,2)]) # 8 (2^3), 9 (3^2)tee(iterable, n=2)将迭代器拆分为n个独立迭代器(注意内存消耗)。
a, b = itertools.tee([1, 2, 3]) # a和b可独立遍历zip_longest(*iterables, fillvalue=None)类似zip,但以最长可迭代对象为准,缺失值填充。
itertools.zip_longest('AB', [1], fillvalue='X') # ('A',1), ('B','X')总结:itertools通过提供高效的迭代工具,显著简化了复杂循环和组合逻辑的实现。熟练掌握其函数可大幅提升代码的Pythonic程度和执行效率,尤其在处理大规模数据或需要优化内存的场景中。