bo****@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

rk***@ucsd.edu
"In the fields of hell where the grass grows high

Are the graves of dreams allowed to die."

-- Richard Harter