8.3 Cloning iterators with tee()
The tee()
function gives us a way to circumvent one of the important Python rules for working with iterables. The rule is so important, we’ll repeat it here:
Iterators can be used only once.
The tee()
function allows us to clone an iterator. This seems to free us from having to materialize a sequence so that we can make multiple passes over the data. Because tee()
can use a lot of memory, it is sometimes better to materialize a list and process it multiple times, rather than trying to use the potential simplification of the tee()
function.
For example, a simple average for an immense dataset could be written in the following way:
from collections.abc import Iterable
def mean_t(source: Iterable[float]) -> float:
it_0, it_1 = tee(iter(source), 2)
N = sum(1 for x in it_0)
sum_x = sum(x for x in it_1)
return sum_x...