an ingrate newbie complains

Dan Dang Griffith google0 at lazytwinacres.net
Thu Feb 5 13:41:27 EST 2004


Peter Otten <__peter__ at web.de> wrote in message news:<bvrvsn$pdn$02$1 at news.t-online.com>...
> Dang Griffith wrote:
> 
> > On Wed, 04 Feb 2004 19:46:28 +0100, Peter Otten <__peter__ at web.de>
> > wrote:
> > 
> >>> That kind of syntax would be especially welcome in list comprehensions:
> >>> 
> >>> [f(x,y) for x in list if y=g(x)<=0]
> >>> 
> >>> If g(x) is a fairly complicated expression, and y occurs several times
> >>> in f(x,y), considerable clarity could be gained.
> >>
> >>Is the above list comprehension that frequent? Then how about
> >>
> >>[f(x, y) for x, y in [(x, g(x)) for x in lst] if cond(y)]
> >>
> >>With the arrival of generator expressions, some of the overhead (the
> >>intermediate list) is bound to go away. In the mean time, there's still
> >>that good old for loop, which IMHO is still the most readible solution if
> >>things get really complicated.
> > 
> > I couldn't get your example to run.
> 
> Checking...
> 
> Python 2.3.3 (#1, Jan  3 2004, 13:57:08)
> [GCC 3.2] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> def f(x, y):
> ...     return '%d%d' % (x, y)
> ...
> >>> def g(x): return 2*x
>  ...
> >>> def cond(x): return x % 10 == 2
>  ...
> >>> lst = range(10)
> >>> [f(x, y) for x, y in [(x, g(x)) for x in lst] if cond(y)]
>  ['12', '612']
> >>>
> 
> Seems to work. Maybe you overlooked the nested list comps?
> 
> > If g is a generator expression, this works for me:
> > 
> > [f(x, y) for x in lst for y in g(x) if cond(y)]
> 
> This is elegant.  
> 
> Peter

OIC--you mentioned generators and I defined g as yield 2*x.
You're right--yours works with non-generator, mine works with generator.

Maybe this should be a new thread, but... is defining a generator
like I did here, i.e. one that really only returns one value considered 
an abuse of generators?  It sure seemed convenient for this application.
def g(x): yield 2*x
    --dang



More information about the Python-list mailing list