I was working on a piece of code today and I need to iterate over a iterable multiple times to do some computes. The body of code is the same for all passes. One obvious thing I can do is to do double loops:
results =  for t in range(n_repeats): for item in get_iterable(): results.append(f.process(item))
The reason that I need to loop over it multiple times rather than loop once and duplicate
results is that
f has an internal state, it gives a different output based on the number of times it has seen the input. The above code did work, but not as nice as I’d like. I utilized
itertools to clean up it a bit:
from itertools import chain, repeat results =  for item in chain(*repeat(get_iterable(), n_repeats)): results.append(f.process(item))
It does the exactly same thing, but the code reads more like straight English.