[Python-ideas] More power in list comprehensions with the 'as' keyword
george.sakkis at gmail.com
Wed Aug 27 20:05:01 CEST 2008
On Wed, Aug 27, 2008 at 12:51 PM, Tarek Ziadé <ziade.tarek at gmail.com> wrote:
> 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)]
-1; not general enough to justify the extra overhead (both in human mental
effort and compiler changes), given that the current alternatives (esp.
genexps) are already quite readable and more flexible.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-ideas