Using iterators to fill out lists will work nicely most of the time, but there are complications to this pattern when the algorithm computing the new values is liable to throw an exception; if the iterator raises an exception along the way, the list will not be available! The following example illustrates this problem.
Suppose we generate the sequence defined recursively by . This sequence quickly diverges to infinity if the initial data is greater than one. Let's generate it with a generator:
import itertools def power_sequence(u0): u = u0 while True: yield u u = u**2
If you try to obtain the first 20 elements of the sequence (initialized by ) by executing:
list(itertools.islice(power_sequence(2.), 20))
An OverflowError exception will be raised and no list will be available, not even the list of elements before the exception was raised. There is currently no way to obtain a partially filled list from...