FAQ
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 []

but if I expand a first, like a = list(a)

c is [4]

So it seems that the "if" part don't get expanded ?

Search Discussions

  • Devan L at Oct 23, 2005 at 9:35 am

    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 []

    but if I expand a first, like a = list(a)

    c is [4]

    So it seems that the "if" part don't get expanded ?
    Well, for every element in p it recalculates list(a). Since the
    generator is exhausted after making a list from it, it gives you
    nothing afterwards. So after it checks the first element, it's
    equivalent to [x for x in p if x in []].
  • Robert Kern at Oct 23, 2005 at 9:38 am

    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
  • Bonono at Oct 23, 2005 at 9:48 am
    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

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedOct 23, '05 at 9:25a
activeOct 23, '05 at 9:48a
posts4
users3
websitepython.org

3 users in discussion

Bonono: 2 posts Devan L: 1 post Robert Kern: 1 post

People

Translate

site design / logo © 2018 Grokbase