a list/re problem
Nobody
nobody at nowhere.com
Sat Dec 12 15:41:46 EST 2009
On Fri, 11 Dec 2009 12:49:42 -0800, Ed Keith wrote:
> the following works:
>
> r = re.compile('\*(.+)\*')
>
> def f(s):
> m = r.match(s)
> if m:
> return m.group(1)
> else:
> return ''
>
> n = [f(x) for x in l if r.match(x)]
>
>
>
> But it is inefficient, because it is matching the regex twice for each
> item, and it is a bit ugly.
> Does anyone have a better solution?
Use a language with *real* list comprehensions?
Flamebait aside, you can use another level of comprehension, i.e.:
n = [m.group(1) for m in (r.match(x) for x in l) if m]
More information about the Python-list
mailing list