Замена нескольких значений в строке — Python

#python #string #replace

#python #строка #заменить

Вопрос:

У меня есть строка say 'I have a string' и список ['I', 'string'] . если мне нужно удалить все элементы в списке из заданной строки, соответствующий цикл for работает нормально. Но когда я пытаюсь сделать то же самое с пониманием списка, он работает не так, как ожидалось, но возвращает список.

 my_string = 'I have a string'
replace_list = ['I', 'string']
for ele in replace_list:
    my_string = my_string.replace(ele, '')
# results --> ' have a '
[my_string.replace(ele, '') for ele in replace_list]
# results --> [' have a string', 'I have a ']
  

Есть ли какой-либо способ сделать это более эффективно?

Ответ №1:

Используйте регулярное выражение:

 import re

to_replace = ['I', 'string']
regex = re.compile('|'.join(to_replace))

re.sub(regex, '', my_string)
  

Вывод:

 ' have a '
  

В качестве альтернативы вы можете использовать reduce :

 from functools import reduce

def bound_replace(string, old):
    return string.replace(old, '')

reduce(bound_replace, to_replace, my_string)
  

Вывод:

 ' have a '
  

Комментарии:

1. в качестве альтернативы вы можете использовать лямбда-выражение для замены вашей функции reduce(lambda string,old: string.replace(old, ''),to_replace,my_string)

2. @AJS Я предпочитаю избегать лямбда-функций, где это возможно, потому что я нахожу синтаксис Python в этом отношении довольно неуклюжим.

3. да, это вопрос предпочтений.

4. Значит, в R нет какой-либо функции, подобной str_replace_all() ?

5. @SmashGuy Я не знаю R, но нет встроенной функции для замены нескольких произвольных подстрок. Есть translate для одиночных символов.