python内置模块itertools用法介绍

  • 2014-05-06 16:46:22
  • 开发
  • 49
  • shevechco

itertools是Python标准库中用于高效处理迭代任务的模块,提供了一系列生成迭代器的工具函数,适用于组合生成、数据分组、无限序列等场景,能显著简化代码并优化性能。
itertools的函数可以分为三类,分别是无限迭代器,有限迭代器,组合迭代器
1.无限迭代器

count(start, step) #生成从 start 开始,步长为 step 的无限序列。
cycle(iterable) #无限循环重复给定可迭代对象。
repeat(value, times) #重复生成 value,默认无限次,或指定times次。

2.有限迭代器

chain(*iterables) #将多个可迭代对象连接为单个迭代器
groupby(iterable, key) #根据 key 函数对相邻元素分组(需先排序)
islice(iterable, start, stop, step) #对迭代器进行切片(类似列表切片,但支持无限迭代器)
takewhile(pred, iterable) #取元素直到 pred 返回 False
dropwhile(pred, iterable) #跳过元素直到 pred 返回 False,之后保留所有元素
zip_longest(*iterables, fillvalue) #类似 zip,但按最长输入填充缺失值
accumulate(iterable, func) #生成累积结果(默认累加,可自定义函数)
tee(iterable, n) #复制一个迭代器为 n 个独立迭代器

3.组合迭代器

product(*iterables, repeat) #生成多个可迭代对象的笛卡尔积(全排列)
permutations(iterable, r) #生成长度为 r 的所有排列(顺序敏感)
combinations(iterable, r) #生成长度为 r 的所有组合(顺序不敏感)
combinations_with_replacement(iterable, r) #允许元素重复的组合

下面我就来在实际场景中的使用方法
创建一个无限迭代器

from itertools import count
for n in count(1,1):
    print(n)
    if n == 5:
        break

传入一个可迭代对象,使用cycle创建无限迭代器

from itertools import cycle
arr = [1,2,3,4,5]
i = 0
for n in cycle(arr):
    print(n)
    if i == 20:
        break
    i += 1

使用repeat创建一个指定迭代次数的无限迭代器

from itertools import repeat
arr = [1,2,3,4,5]
for d in repeat(arr, 3):
    print(d)

使用accumclate创建有限迭代器,筛选符合条件的组合

from itertools import combinations
arr = [1,2,3,4,5]
for d in combinations(arr, 2):
    if sum(d) == 5:
        print(d)

使用chain合并多个迭代器

from itertools import chain
arr = [1,2,3,4,5]
arr2 = [6,7,8,9]
arr3 = chain(arr, arr2)
print(list(arr3))

使用roduct创建一个组合迭代器,生成可迭代对象的笛卡尔积

from itertools import product
arr = [1,2,3,4,5]
arr2 = [6,7,8,9]
arr3 = product(arr, arr2)
print(list(arr3))

使用permutations,返回iterable(可迭代对象)中元素的所有组合形式

from itertools import permutations
arr = [1,2,3,4,5]
arr2 = permutations(arr)
for d in arr2:
    print(d)

itertools里面包含很多迭代工具函数,其他方法可以自行进行学习测试。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/8

相关推荐