[Python-ideas] More power in list comprehensions with the 'as' keyword

Imri Goldberg lorgandon at gmail.com
Wed Aug 27 19:00:32 CEST 2008


+1 from me, I find myself doing that all the time as well.

On Wed, Aug 27, 2008 at 7:51 PM, Tarek Ziadé <ziade.tarek at gmail.com> wrote:

> Hello
>
> There's a pattern I am doing all the time: filtering out some elements of a
> list, and cleaning them in the same move.
>
> For example, if I have a multi line text, where I want to:
>
> - keep non empty lines
> - clean non empty lines
>
> I am doing:
>
>     >>> text = """
>     ... this is a multi-line text\t
>     ...
>     ... \t\twith
>     ...
>     ... muliple lines."""
>
>     >>> [l.strip() for l in text.split('\n') if l.strip() != '']
>     ['this is a multi-line text', 'with', 'muliple lines.']
>
> It is not optimal, because I call strip() twice. I could use ifilter then
> imap or even use a real loop, but I
> want my simple, concise, list comprehension !  And I couldn't find a simple
> way to express it.
>
> The pattern can be generically resumed like this :
>
>    [transform(e) for e in seq if some_test(transform(e))]
>
> So what about using the 'as' keyword to extend lists comprehensions, and
> to avoid calling transform() twice ?
>
> Could be:
>
>    [transform(e) as transformed for e in seq if some_test(transformed)]
>
> In my use case I would simply have to write;:
>
>   [l.strip() as stripped for l in text.split('\n') if stripped != '']
>
> Which seems to me clear and concise.
>
> Regards,
> Tarek
>
> --
> Tarek Ziadé | Association AfPy | www.afpy.org
> Blog FR | http://programmation-python.org
> Blog EN | http://tarekziade.wordpress.com/
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
>
>


-- 
Imri Goldberg
--------------------------------------
www.algorithm.co.il/blogs/
www.imri.co.il
--------------------------------------
-- insert signature here ----
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20080827/2a4173f6/attachment.html>


More information about the Python-ideas mailing list