# Suggestion for impriving list comprehensions

Steven D. Majewski sdm7g at Virginia.EDU
Fri Jul 27 03:20:54 CEST 2001

```On 26 Jul 2001, Thomas Bellman wrote:

> or my personal favourite
>
>     map(lambda x,g=fib(): g.next(), range(N))
>

Cool.

I see I can get the odd values from the first 10 fibonacci numbers with:

>>> def odd(x): return x % 2
...
>>> def even(x) : return not(odd(x))
...
>>> filter( odd, map( lambda n,f=fib().next: f(), range(10) ))
[1, 1, 3, 5, 13, 21, 55]

But the first 10 odd fibonacci numbers doesn't work the same way.

But Re: Guido's suggestion about an iterator algebra :
maybe what we need are iterator versions of map, filter, reduce, etc.

Given:

>>> def gfilter( f, s ):
...     for x in s:
...             if f(x): yield x

Then the first 10 odd fibonacci numbers are:

>>> map( lambda n,f=gfilter( odd, fib() ).next: f(), range(10) )
[1, 1, 3, 5, 13, 21, 55, 89, 233, 377]

( I'm not completely sure that I actually *like* all the iterator
syntax and semantics -- the extra indirection which sometimes
needs to be explicit  ( the "next" attribute ) but sometimes
gets done automagically by 'for' is something I'm not quite
used to yet! )

-- Steve Majewski

```