bonono at gmail.com wrote:
Hi,
I am wondering how this is evaluated.
a=(x for x in [1,2,3,4])
p=[4,5]
c=[x for x in p if x in list(a)]
c is []
No it isn't.
In [1]: a=(x for x in [1,2,3,4])
In [2]: p=[4,5]
In [3]: c=[x for x in p if x in list(a)]
In [4]: c
Out[4]: [4]
I'm willing to bet that you used up the 'a' iterator before you ran that
list comprehension, though.
In [5]: c=[x for x in p if x in list(a)]
In [6]: c
Out[6]: []
Note that "x in list(a)" gets executed on each iteration, but the
iterator is used up on the first time.
In [7]: a=(x for x in [1,2,3,4])
In [8]: p = [4, 5, 2, 3]
In [9]: c=[x for x in p if x in list(a)]
In [10]: c
Out[10]: [4]
--
Robert Kern
rkern at ucsd.edu
"In the fields of hell where the grass grows high
Are the graves of dreams allowed to die."
-- Richard Harter