
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/