# execution order in list/generator expression

bonono at gmail.com bonono at gmail.com
Sun Oct 23 11:48:35 CEST 2005

```Ah, no wonder. I test with p=[5,4].

thanks. so basically, I still need to expand it first given this
behaviour.

Robert Kern wrote:
> 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

```