On 12/12/2009 8:24 AM, Peter Otten wrote:

But it is inefficient, because it is matching the regex twice for each
item, and it is a bit ugly.

I could use:


n = []
for x in keys:
     m = r.match(x)
         if m:
             n.append(m.group(1))


It is more efficient, but much uglier.

It's efficient and easy to understand; maybe you have to readjust your
taste.

I agree, it's easy to understand, but it's also ugly because of the level of indentation (which is too deep for such a simple problem).

Does anyone have a better solution?

(sorry to ramble around)

A few months ago, I suggested an improvement in the python-ideas list to add a post-filter to list-comprehension, somewhere in this line:

a = [f(x) as F for x in l if c(F)]

where the evaluation of f(x) will be the value of F so F can be used in the if-expression as a post-filter (complementing list-comps' pre-filter).

Many doubted its usefulness since they say it's easy to wrap in another list-comp:
a = [y for y in (f(x) for x in l) if c(y)]
or with a map and filter
a = filter(None, map(f, l))

Up till now, I don't really like the alternatives.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to