2017-02-08 4 views
0

В моем коде мне нужно заменить все Is 1s, а все os - 0. Я могу сделать это в двух утверждениях, что код выглядит следующим образом:Заменить несколько символов в строке в python сразу

stringtochange=raw_input("What do you want to change?") 
print stringtochange.replace("I","1") 
print stringtochange.replace("o","0") 

, но мне нужно, чтобы сделать все это одним махом. Есть идеи?

+0

Измените свой вопрос, включив в него тег Python2.x или Python3.x. args для str.translate сильно изменились между Py2 и Py3 –

+0

@johnmachin будет делать, извините за это – byu

ответ

3

Вы можете использовать string.translate:

s = "IslkdoIoooI" 
import string 
s.translate(string.maketrans("Io", "10")) 

# '1slkd010001' 
0

Вы можете отобразить несколько значений, используя список понимание:

str = "Itesto" 
source = ['I', 'o'] 
dest = ['1', '0'] 
''.join([dest[source.index(i)] if i in source else i for i in str]) 
>> '1test0' 
+0

Хороший ответ - Некоторые замечания о стиле и т. д .: Не используйте имя 'str' для своих собственных объектов - он маскирует из встроенного типа. Также можно использовать однобуквенные имена, если их объем невелик; однако i (и j и k) означают «индекс» для большинства людей. Ваш 'i' является персонажем; называть его 'c' было бы лучше. –

0

Эта альтернатива использует dict для отображения исходных символов для замены символов:

>>> s = "HIJnop"; xmap = {"I": "1", "o": "0"}; ''.join([xmap.get(c, c) for c in s]) 
'H1Jn0p'