背景
迭代器(Iterator)在 Python 中是一种很常用的数据结构;
相比 list ,迭代器最大的优势就是只有当迭代到某个值时才会计算这个值的结果,避免占用不必要的内存,
所以面对大型的数据集时,迭代器一般比 list 效率更高;
itertools 就是用来操作迭代器的 Python 内置模块。
简介
itertools 库是 Python 中处理迭代操作的标准工具,
在处理序列和集合时,它可以像函数式编程过程一样,在处理过程中直接过滤内容,
并且在组合处理其他序列或集合时,无需显式地创建中间序列或集合,
可以显著提高代码的开发效率和可读性。
示例:itertools 各方法使用
itertools.count(start=0, step=1)
根据传入的参数生成无限长的一串数值;
start: 指定迭代开始值,默认为 0;
step: 指定迭代的步长,默认为 1;
示例
import itertools
for i in itertools.count(start=2, step=2):
if i > 12:
break
print("count 输出", i)
运行结果
count 输出 2
count 输出 4
count 输出 6
count 输出 8
count 输出 10
count 输出 12
itertools.cycle(iterable)
从传入的 iterable 中取值,当 iterable 里的值取完,会跳到 iterable 的开头重复取值,一直重复下去;
iterable: 可迭代对象,一般是 list;
示例
import itertools
l = 0
for i in itertools.cycle(range(6)):
print("cycle 输出", i)
if l > 8:
break
l += 1
运行结果
cycle 输出 0
cycle 输出 1
cycle 输出 2
cycle 输出 3
cycle 输出 4
cycle 输出 5
cycle 输出 0
cycle 输出 1
cycle 输出 2
cycle 输出 3
itertools.repeat(object,times)
将一个对象重复指定次数或者无限次;
object:指定重复的对象;
times:指定重复的次数,如果 times 没有传入,那么是无限次;
示例
import itertools
# 指定重复次数
for i in itertools.repeat("a", 5):
print("指定重复次数,重复输出:", i)
# 不指定重复次数,无限循环
l = 0
for i in itertools.repeat("b"):
print("不指定重复次数,输出:", i)
if l > 6:
break
l += 1
运行结果
指定重复次数,重复输出: a
指定重复次数,重复输出: a
指定重复次数,重复输出: a
指定重复次数,重复输出: a
指定重复次数,重复输出: a
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
不指定重复次数,输出: b
itertools.product(*iterables, repeat=1)
返回可迭代对象的笛卡儿积;
这些可迭代对象之间的笛卡儿积,也可以使用 for 循环来实现,
例如 product (A, B) 与 ((x,y) for x in A for y in B) 就实现一样的功能。
*iterables: 一个或多个可迭代对象;
repeat: 可迭代对象的重复次数;
示例
import itertools
# product 输出
for i in itertools.product([1, 2], [3, 4]):
print("product 输出", i)
# for 循环实现
for i in ((x, y) for x in [1, 2] for y in [3, 4]):
print</