ops...@batnet.com a écrit :
I'm a little baffled by the inconsistency here. Anyone have any
explanations?
def gen():
... yield 'a'
... yield 'b'
... yield 'c'
...
[c1 + c2 for c1 in gen() for c2 in gen()]
['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']
list(c1 + c2 for c1 in gen() for c2 in gen())
['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']
it1 = gen()
it2 = gen()
list(c1 + c2 for c1 in it1 for c2 in it2)
['aa', 'ab', 'ac']
Why does this last list only have three elements instead of nine?
--
http://mail.python.org/mailman/listinfo/python-list
When you use "for c2 in gen()]", at each loop of c1, a new gen is
instanciated and looped-over to continue building the list.
Whereas when you use "for c2 in it2)", it's always the same instance of
gen which is used (it2), so after 3 loops on c2 this instance is
exhausted, and the following iterations on c1 (and then attempts of
looping on c2) don't give anything because the looping on c2 gives an
exception "StopIteration".
Regards,
pascal
--
http://mail.python.org/mailman/listinfo/python-list