itertools 官方文档 :itertools --- 为高效循环而创建迭代器的函数 — Python 3.12.0 文档
1. count()
创建一个无穷的迭代器 itertools.count(start ,step)
import itertools
import time
start =0
step=5
for i in itertools.count(start,step) :
print(i)
time.sleep(0.5) # 防止刷的太快
2. cycle()
创建无线循环迭代器
import itertools
import time
x = "abcdef"
for i in itertools.cycle(x):
print(i)
time.sleep(0.5)
3. repeat()
一个元素无线循环 , itertools.repeat(elem,infi / n)
import itertools
import time
x = "abcdef"
for i in itertools.repeat(x,3):
print(i)
time.sleep(0.5)
4. itertools.product()
可迭代对象输入的笛卡儿积。
大致相当于生成器表达式中的嵌套循环。例如, product(A, B)
和 ((x,y) for x in A for y in B)
返回结果一样。
嵌套循环像里程表那样循环变动,每次迭代时将最右侧的元素向后迭代。这种模式形成了一种字典序,因此如果输入的可迭代对象是已排序的,笛卡尔积元组依次序发出。
要计算可迭代对象自身的笛卡尔积,将可选参数 repeat 设定为要重复的次数。例如,product(A, repeat=4)
和 product(A, A, A, A)
是一样的。
该函数大致相当于下面的代码,只不过实际实现方案不会在内存中创建中间结果。
def product(*args, repeat=1): # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 pools = [tuple(pool) for pool in args] * repeat result = [[]] for pool in pools: result = [x+[y] for x in result for y in pool] for prod in result: yield tuple(prod)
在 product() 运行之前,它会完全耗尽输入的可迭代对象,在内存中保留值的临时池以生成结果积。 相应地,它只适用于有限的输入。