python — заменить несколько разных символов только одним [дубликатом]

Я ищу способ заменить одни символы на другие.

Например, у нас есть:

chars_to_be_replaced = "ihgr"

и мы хотим, чтобы они были заменены на

новый_символ = "б"

Так что новая строка

s = "я голоден"

становится

s '= "bm bunbby".

Я хорошо знаю, что вы можете делать это по одному символу за раз с помощью .replace или регулярных выражений, но я ищу способ пройти через строку только один раз.

Re.sub проходит через строку только один раз? Есть ли другие способы сделать это? Спасибо

Спасибо


person Pierre L.    schedule 27.06.2017    source источник
comment
Никаких усилий   -  person Fallenhero    schedule 27.06.2017
comment
как у вас не работает string.replace()?   -  person Drako    schedule 27.06.2017
comment
При замене вам нужно просмотреть строку для каждого символа, который вы хотите удалить, не так ли?   -  person Pierre L.    schedule 27.06.2017
comment
Нет, не знаешь. import re; re.sub("[ihgr]", "b", "im hungry")   -  person Eric Duminil    schedule 27.06.2017
comment
Ну, это не .replace()   -  person Pierre L.    schedule 27.06.2017


Ответы (2)


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

from string import maketrans

chars_to_be_replaced = "ihgr"
new_char = "b"
s = "im hungry"

trantab = maketrans(chars_to_be_replaced, new_char * len(chars_to_be_replaced))

print s.translate(trantab)
# bm bunbby
person Ghilas BELHADJ    schedule 27.06.2017

Как насчет этого:

chars_to_be_replaced = "ihgr"
new_char = "b"

my_dict = {k: new_char for k in chars_to_be_replaced}

s = "im hungry"

new_s = ''.join(my_dict.get(x, x) for x in s)
print(new_s)  # bm bunbby

''.join(my_dict.get(x, x) for x in s): для каждой буквы в вашей исходной строке вместо этого он пытается получить значение из словаря, если только оно не существует, и в этом случае возвращается оригинал.


ПРИМЕЧАНИЕ. Вы можете ускорить его (немного), передав list в join вместо генератора:

new_s = ''.join([my_dict.get(x, x) for x in s])
person Ma0    schedule 27.06.2017
comment
Я тестировал только этот небольшой пример, но это занимает больше времени, чем использование четырехкратной замены. Нужно использовать его на более репрезентативных примерах - person Pierre L.; 27.06.2017