itertools是Python标准库中提供的一个模块,它包含许多用于迭代器操作的函数。以下是一些常见的itertools函数及其用法示例:
1.itertools.chain:将多个迭代器连接在一起,形成一个更大的迭代器
import itertools
a = [1, 2, 3]
b = ['a', 'b', 'c']
c = itertools.chain(a, b) #c为一个迭代器对象,只能遍历一遍
for item in c:
print(item)
# 输出:1 2 3 a b c
注:迭代器是惰性的,对于一个迭代器遍历完成后不会再重新遍历,而是从上次结束的位置开始遍历,如果想要再次遍历c中的所有元素,可以使用itertools.tee函数将c复制成两个迭代器,并分别遍历这两个迭代器。
import itertools
def combine(n,k):
result=[] #初始化结果数组
a=[1,2,3]
b=['a','b','c']
c=itertools.chain(a,b)
# 复制迭代器c成两个迭代器c1和c2
c1, c2 = itertools.tee(c, 2)
# 遍历c1
for i in c1:
print(i, end=' ')
# 再次遍历c2
for i in c2:
print(i, end=' ')
#输出结果:
1 2 3 a b c 1 2 3 a b c
2.itertools.cycle:将一个迭代器无限重复,直到被关闭
import itertools
a = [1, 2, 3]
c = itertools.cycle(a)
count = 0
for item in c:
if count < 5:
print(item)
count += 1
else:
break
# 输出:1 2 3 1 2
注:itertools.cycle函数会不断地重复输出可迭代对象中的所有元素,直到被关闭。一旦开始使用itertools.cycle生成的迭代器,它就会无限循环输出可迭代对象中的所有元素,直到迭代器被关闭或程序被终止。
3.itertools.islice:从一个迭代器中选择一个切片
import itertools
# 定义一个列表
lst = [1, 2, 3, 4, 5]
# 使用itertools.islice函数对列表进行切片
lst_slice = itertools.islice(lst, 1, 4, 2) #列表,起始位置,终止位置,步长
# 遍历切片后的迭代器中的元素,输出所有元素
for i in lst_slice:
print(i, end=' ')
#输出结果
2 4
4.itertools.product:生成两个或多个迭代器中的所有元素的笛卡尔积
import itertools
a = [1, 2]
b = ['a', 'b']
c = itertools.product(a, b)
for item in c:
print(item)
# 输出:(1, 'a') (1, 'b') (2, 'a') (2, 'b')
5.itertools.permutations:生成指定长度的所有排列
import itertools
a = [1, 2, 3]
c = itertools.permutations(a, 2)
for item in c:
print(item)
# 输出:(1, 2) (1, 3) (2, 1) (2, 3) (3, 1) (3, 2)
6.itertools.combinations:生成指定长度的所有组合
import itertools
a = [1, 2, 3]
c = itertools.combinations(a, 2)
for item in c:
print(item)
# 输出:(1, 2) (1, 3) (2, 3)