How can I delete multiple characters in a list?

Having a list like this:

x = ['+5556', '-1539', '-99','+1500'] 

How can I remove + and - in a beautiful way?

This works, but I'm looking for a more pythonic way.

 x = ['+5556', '-1539', '-99', '+1500'] n = 0 for i in x: x[n] = i.replace('-','') n += 1 n = 0 for i in x: x[n] = i.replace('+','') n += 1 print x 

Edit

+ and - not always in a leading position; they can be anywhere.

+6
source share
5 answers

Use str.strip() or preferably str.lstrip() :

 In [1]: x = ['+5556', '-1539', '-99','+1500'] 

using list comprehension :

 In [3]: [y.strip('+-') for y in x] Out[3]: ['5556', '1539', '99', '1500'] 

using map() :

 In [2]: map(lambda x:x.strip('+-'),x) Out[2]: ['5556', '1539', '99', '1500'] 

Edit:

Use a solution from @Duncan based on str.translate() if there are also + and - between the numbers.

+14
source

Use string.translate() , or for Python 3.x str.translate :

Python 2.x:

 >>> import string >>> identity = string.maketrans("", "") >>> "+5+3-2".translate(identity, "+-") '532' >>> x = ['+5556', '-1539', '-99', '+1500'] >>> x = [s.translate(identity, "+-") for s in x] >>> x ['5556', '1539', '99', '1500'] 

Python 2.x unicode:

 >>> u"+5+3-2".translate({ord(c): None for c in '+-'}) u'532' 

Python version 3.x:

 >>> no_plus_minus = str.maketrans("", "", "+-") >>> "+5-3-2".translate(no_plus_minus) '532' >>> x = ['+5556', '-1539', '-99', '+1500'] >>> x = [s.translate(no_plus_minus) for s in x] >>> x ['5556', '1539', '99', '1500'] 
+19
source
 x = [i.replace('-', "").replace('+', '') for i in x] 
+11
source

string.translate() will only work with byte string objects, not unicode. I would use re.sub :

 >>> import re >>> x = ['+5556', '-1539', '-99','+1500', '45+34-12+'] >>> x = [re.sub('[+-]', '', item) for item in x] >>> x ['5556', '1539', '99', '1500', '453412'] 
+1
source
 basestr ="HhEEeLLlOOFROlMTHEOTHERSIDEooEEEEEE" def replacer (basestr, toBeRemove, newchar) : for i in toBeRemove : if i in basestr : basestr = basestr.replace(i, newchar) return basestr newstring = replacer(basestr,['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'], "") print(basestr) print(newstring) 

Output:

HhEEeLLlOOFROlMTHEOTHERSIDEooEEEEEE

Helloo

-1
source

All Articles