Python itertools
详解
import itertools
一旦导入了itertools
模块,我们就可以使用其中的函数和迭代器了。
无限迭代器
itertools
模块中的一些函数返回的是无限迭代器,即可以无限次地生成迭代值。
1. count
count
函数可以生成从指定起始数字开始的无限整数序列。它的使用方式如下所示:
import itertools
for i in itertools.count(10, 2):
if i > 20:
break
print(i)
执行上述代码的输出结果是:
10
12
14
16
18
20
在这个例子中,我们使用count(10, 2)
来生成从10开始的无限整数序列。每次迭代,数字会递增2,直到大于20时终止迭代。
2. cycle
cycle
函数可以无限次地循环一个可迭代对象。它接受一个可迭代对象作为参数,并不断地重复生成其中的元素。
import itertools
count = 0
for item in itertools.cycle('abcd'):
if count > 10:
break
print(item)
count += 1
执行上述代码的输出结果是:
a
b
c
d
a
b
c
d
a
b
c
在这个例子中,我们使用cycle('abcd')
来无限次地循环生成包含字符'abcd'
的字符串序列。在每次迭代中,会按顺序返回这些字符。
3. repeat
repeat
函数可以生成一个无限重复的元素。它接受一个元素和一个可选的次数参数,并以元素作为结果迭代器的元素。
import itertools
for item in itertools.repeat('abc', 3):
print(item)
执行上述代码的输出结果是:
abc
abc
abc
在这个例子中,我们使用repeat('abc', 3)
生成一个无限重复的'abc'
序列,并限定了重复次数为3次。
有限迭代器
除了无限迭代器,itertools
模块还提供了一些函数用于生成有限的迭代器。
1. islice
islice
函数可以从指定序列中截取片段,生成一个迭代器。它接受一个可迭代对象、起始位置、终止位置和可选的步长参数。
下面是islice
函数的一个例子:
import itertools
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for item in itertools.islice(numbers, 2, 8, 2):
print(item)
执行上述代码的输出结果是:
3
5
7
在这个例子中,我们使用islice(numbers, 2, 8, 2)
从列表numbers
中截取了索引为2到索引为7的元素,步长为2。最终生成的迭代器包含了这个截取的片段。
迭代器操作
itertools
模块中的一些函数用于对迭代器进行操作和处理。
1. chain
chain
函数可以将多个可迭代对象串联起来,形成一个单一的迭代器。它接受多个可迭代对象作为参数,并将它们的元素依次返回。
下面是chain
函数的一个例子:
import itertools
nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
nums3 = [7, 8, 9]
for item in itertools.chain(nums1, nums2, nums3):
print(item)
执行上述代码的输出结果是:
1
2
3
4
5
6
7
8
9
在这个例子中,我们使用chain(nums1, nums2, nums3)
将三个列表串联起来,并将它们的所有元素依次返回。
2. compress
compress
函数根据一个布尔值序列选择元素。它接受两个可迭代对象作为参数,第一个参数用于选择元素,第二个参数是待选择的元素序列。
下面是compress
函数的一个例子:
import itertools
data = [1, 2, 3, 4, 5, 6, 7]
selector = [True, True, False, False, True, True, False]
for item in itertools.compress(data, selector):
print(item)
执行上述代码的输出结果是:
1
2
5
6
在这个例子中,我们使用compress(data, selector)
根据selector
中的布尔值序列选择data
中的元素进行迭代。只有在selector
中对应位置的值为True
时,相应位置的值才会被返回。
组合和排列
itertools
模块中的一些函数用于生成组合和排列。
1. combinations
combinations
函数可以生成指定长度的组合。它接受一个可迭代对象和一个整数r
为参数,生成包含所有长度为r
的组合的迭代器。
下面是combinations
函数的一个例子:
import itertools
letters = ['A', 'B', 'C', 'D']
for item in itertools.combinations(letters, 2):
print(item)
执行上述代码的输出结果是:
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'C')
('B', 'D')
('C', 'D')
在这个例子中,我们使用combinations(letters, 2)
生成了所有长度为2的组合,并将它们的元素按顺序返回。
2. permutations
permutations
函数可以生成指定长度的排列。它接受一个可迭代对象和一个整数r
为参数,生成包含所有长度为r
的排列的迭代器。
下面是permutations
函数的一个例子:
import itertools
letters = ['A', 'B', 'C']
for item in itertools.permutations(letters, 2):
print(item)