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

Reply via email to