Python tee()克隆迭代器

Python 使用tee()克隆迭代器,使用tee()函数可以突破Python处理可迭代对象时的一条重要规则,这条规则非常重要,在此重申一遍。

 迭代器只能使用一次。

可以使用tee()函数克隆可迭代对象。我们可以利用它多次使用序列中的数据而不必实例化序列,例如对一个大型数据集求算术平均值的写法如下所示:

def mean(iterator: Iterator[float]) -> float:
    it0, it1 = tee(iterator, 2)
    N = sum(1 for x in it0)
    s1 = sum(x for x in it1)
    return s1 / N

计算过程不涉及任何实例化数据集的操作,从而避免了将整个数据集放入内存中。注意,类型标示float并不排除使用整数的场景,mypy能处理类型转换规则,这样的定义兼顾了整数和实数类型参数。

看上去不错,但实际使用tee()函数存在一个严重的限制条件。在绝大多数Python实现中,克隆是通过实例化序列实现的。处理小数据集时,它确实有助于我们突破“只能使用一次”的限制,但它对于大型数据集的效果往往不佳。

另外,目前tee()函数的实现方法需要遍历源迭代器。对使用者来说,如果有无限次使用迭代器的语法糖会很方便,但在实际使用中,这样的实现其实很难驾驭。所以在Python中使用tee()函数时要小心。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程