ok, let me explain how iterators work in Python:
`sum([1 for x in iterable if f(x)])` is different than `sum(1 for x in iterable if f(x))`
The first one will take one pass to create the list, then sum (total 2 passes). The second one will create an iterator and pass it to sum. Only when sum runs the iterator will be iterated, so it's one pass.

The best way to prove my point is by an example. Run this in your python terminal and tell me what you get:
>>> def f(x): print x; return x
>>> iterator = (f(x) for x in range(10)) # this will print nothing because it doesn't iterate yet
>>> sum(iterator) # this will print all the values and return their sum

Iterators in Python are really powerful if you know how to use them. They lazily pass through the data, and they don't create any lists.