Если я правильно понял, мы можем использовать str.maketrans
и str.translate
методы здесь, такие как
from itertools import repeat
sentence1 = sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))
Что это делает построчно:
создать отображение букв на None
, которое будет интерпретироваться как "удалить этот символ"
translation_mapping = dict(zip(letters, repeat(None))
создать из него таблицу перевода
translation_table = str.maketrans(translation_mapping)
использовать таблицу перевода для данного str
sentence1 = sentence.translate(translation_table)
Тест
>>> sentence = 'Some Text'
>>> letters = 'te'
>>> sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))
'Som Tx'
Сравнение
from timeit import timeit
print('this solution:',
timeit('sentence.translate(str.maketrans(dict(zip(letters, repeat(None)))))',
'from itertools import repeat\n'
'sentence = "Hello World" * 100\n'
'letters = "el"'))
print('@FailSafe solution using `re` module:',
timeit('re.sub(str([letters]), "", sentence)',
'import re\n'
'sentence = "Hello World" * 100\n'
'letters = "el"'))
print('@raratiru solution using `str.join` method:',
timeit('"".join([x for x in sentence if x not in letters])',
'sentence = "Hello World" * 100\n'
'letters = "el"'))
дает на моем ПК
this solution: 3.620041800000024
@FailSafe solution using `re` module: 66.5485033
@raratiru solution using `str.join` method: 70.18480099999988
поэтому нам, вероятно, следует подумать дважды, прежде чем везде использовать регулярные выражения и str.join
односимвольных str
ings.