Python tee()克隆迭代器

  • Post category:Python

Python 中的 tee() 方法可以用于克隆一个迭代器并且不影响原来的迭代器。它会返回一个元组,其中每个元素都是新克隆出来的迭代器对象。使用 tee() 方法比直接复制迭代器的效率更高,因为它只需要遍历原来的迭代器一次。

下面是 tee() 方法的使用方法和示例说明:

使用方法

tee() 方法位于 Python 标准库的 itertools 模块中,使用前需要先导入模块:

import itertools

tee() 方法的基本语法如下:

itertools.tee(iterable, n=2)

其中,iterable 参数是要被克隆的迭代器对象,n 参数是指要克隆的迭代器数目,默认为 2。

示例说明

接下来我们演示两个示例,来展示如何使用 tee() 方法。

示例一

示例一中,我们将对一个列表进行遍历,并将它克隆成两个迭代器。然后我们使用第一个迭代器进行遍历,并将元素依次输出,然后再使用第二个迭代器遍历同样的列表,输出结果和第一个迭代器一样。

import itertools

my_list = [1, 2, 3, 4, 5]

iter1, iter2 = itertools.tee(my_list)

# 遍历第一个迭代器并输出元素
for i in iter1:
    print(i)

# 遍历第二个迭代器并输出元素
for j in iter2:
    print(j)

输出结果如下:

1
2
3
4
5
1
2
3
4
5

示例二

示例二中,我们将使用 itertools.count() 生成一个无限迭代器,并将它克隆成三个迭代器。然后我们使用第一个迭代器进行遍历,并只输出前 10 个元素。再使用第二个迭代器遍历同样的序列,直到第 20 个元素。最后使用第三个迭代器遍历同样的序列,输出剩下的所有元素。

import itertools

iter1, iter2, iter3 = itertools.tee(itertools.count())

# 遍历第一个迭代器,输出前 10 个元素
for i, n in enumerate(iter1):
    if i == 10:
        break
    print(n)

# 遍历第二个迭代器,输出第 11 到 20 个元素
for i, n in enumerate(iter2):
    if i == 10:
        break
for i, n in enumerate(iter2):
    if i == 10:
        break
    print(n)

# 遍历第三个迭代器,输出剩下的元素
for n in iter3:
    print(n)

输出结果如下:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
...