<i>&gt; I find myself often having to wrap expressions in list(...) to force the lists.</i><p>Out of curiosity, why do you need to force the lists?<p><i>&gt; Generators make things much more complicated. They are basically a way to make (interacting, by means of side-effects) coroutines</i><p>Huh? Generators are a way to not make expensive computations until you have to--as well as to not use memory that you don&#x27;t need. Basically, if all you&#x27;re doing with a collection of items is iterating over it (which covers a lot of use cases--but perhaps not yours), you should use a generator, not a list--your code will run faster and use less memory.<p><i>&gt;  In most use cases (scripting) lists are much easier to use (no interleaving of side effects) and there is plenty of memory available to force them.</i><p>Generators don&#x27;t have to have side effects. And there are plenty of use cases for which you do not have &quot;plenty of memory available&quot; (again, perhaps not yours).<p><i>&gt; IMHO generators by default is a bad choice.</i><p>I think lists by default was a bad choice, because it forces everyone to incur the memory and performance overhead of constructing a list whether they need to or not. The default should be the leaner of the two alternatives; people who need or prefer the extra overhead can then get it by using list() (or a list comprehension instead of a generator expression, which is just a matter of typing brackets instead of parentheses).