On Tue, 19 Apr 2005 13:33:17 -0700, James Stroud <[EMAIL PROTECTED]> wrote:
>Hello,
>
>I am looking for a nice way to take only those charachters from a string that
>are in another string and make a new string:
>
>>>> astr = "Bob Carol Ted Alice"
>>>> letters = "adB"
>>>> some_func(astr,letters)
>"Bad"
>
>I can write this like this:
>
>astr = "Bob Carol Ted Alice"
>letters = "adB"
>
>import sets
>alist = [lttr for lttr in astr if lttr in Set(letters)]
>newstr = ""
>for lttr in alist:
> newstr += lttr
>
>But this seems ugly. I especially don't like "newstr += lttr" because it makes
>a new string every time. I am thinking that something like this has to be a
>function somewhere already or that I can make it more efficient using a
>built-in tool.
>
>Any ideas?
>
>James
>
I think this will be worth it if your string to modify is _very_ long:
>>> def some_func(s, letters, table=''.join([chr(i) for i in xrange(256)])):
... return s.translate(table,
... ''.join([chr(i) for i in xrange(256) if chr(i) not in letters]))
...
>>> some_func("Bob Carol Ted Alice", 'adB')
'Bad'
see help(str.translate)
If you want to use it in a loop, with the same "letters" I'd want to eliminate
the repeated
calculation of the deletions. You could make a factory function that returns a
function
that uses deletions from a closure cell. But don't optimize prematurely ;-)
Regards,
Bengt Richter
--
http://mail.python.org/mailman/listinfo/python-list