a list/re problem

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Fri Dec 11 20:55:51 EST 2009


On Fri, 11 Dec 2009 12:49:42 -0800, Ed Keith wrote:

> I have a problem and I am trying to find a solution to it that is both
> efficient and elegant.
> 
> I have a list call it 'l':
> 
> l = ['asc', '*nbh*', 'jlsdjfdk', 'ikjh', '*jkjsdfjasd*', 'rewr']
> 
> Notice that some of the items in the list start and end with an '*'. I
> wish to construct a new list, call it 'n' which is all the members of l
> that start and end with '*', with the '*'s removed.
> 
> So in the case above n would be ['nbh', 'jkjsdfjasd']
> 
> the following works:
> 
> r = re.compile('\*(.+)\*')
[snip]


Others have suggested using a list comp. Just to be different, here's a 
version using filter and map.

l = ['asc', '*nbh*', 'jlsdjfdk', 'ikjh', '*jkjsdfjasd*', 'rewr']
l = map(
  lambda s: s[1:-1] if s.startswith('*') and s.endswith('*') else '', l)
l = filter(None, l)



-- 
Steven




More information about the Python-list mailing list