Программисты часто сталкиваются с задачей удаления какого-нибудь символа из строки. Но иногда бывает нужно удалить не один символ, а целый список нежелательных символов. Например, специальных символов — для восстановления валидных паролей. Есть и другие ситуации, когда это может понадобиться. Давайте рассмотрим, каким образом можно решить такую задачу.
Метод 1: использование replace()
Можно использовать replace() внутри цикла для выявления bad_char («плохого» символа) и замены его на пустую строку (т. е., по сути, удаления). Это самый базовый и неэффективный с точки зрения производительности подход.
# Python3 code to demonstrate
# removal of bad_chars
# using replace()
# initializing bad_chars_list
bad_chars = [';', ':', '!', "*", " "]
# initializing test string
test_string = "Ge;ek * s:fo ! r;Ge * e*k:s !"
# printing original string
print("Original String : " + test_string)
# using replace() to
# remove bad_chars
for i in bad_chars :
test_string = test_string.replace(i, '')
# printing resultant string
print("Resultant list is : " + test_string)
Результат:
Original String : Ge;ek<em>s:fo!r;Ge</em>e*k:s! Resultant list is : GeeksforGeeks
Метод 2: использование join() и генератора
При помощи join() мы переделываем строку. В функции генератора мы прописываем логику игнорирования определенных символов (входящих в bad_chars), в результате новая строка формируется без них.
# Python3 code to demonstrate
# removal of bad_chars
# using join() + generator
# initializing bad_chars_list
bad_chars = [';', ':', '!', "*", " "]
# initializing test string
test_string = "Ge;ek * s:fo ! r;Ge * e*k:s !"
# printing original string
print("Original String : " + test_string)
# using join() + generator to
# remove bad_chars
test_string = ''.join(i for i in test_string if not i in bad_chars)
# printing resultant string
print("Resultant list is : " + test_string)
Результат:
Original String : Ge;ek<em>s:fo!r;Ge</em>e*k:s! Resultant list is : GeeksforGeeks
Метод 3: использование filter()
Еще один вариант решения этой задачи. Функция filter при использовании lambda-функции может удалить все bad_chars и вернуть строку в желанном для нас виде.
# Python3 code to demonstrate
# removal of bad_chars
# using filter()
# initializing bad_chars_list
bad_chars = [';', ':', '!', "*", " "]
# initializing test string
test_string = "Ge;ek * s:fo ! r;Ge * e*k:s !"
# printing original string
print("Original String : " + test_string)
# using filter() to
# remove bad_chars
test_string = filter(lambda i: i not in bad_chars, test_string)
test_string = "".join(test_string)
# printing resultant string
print("Resultant list is : " + test_string)
Результат:
Original String : Ge;ek<em>s:fo!r;Ge</em>e*k:s! Resultant list is : GeeksforGeeks

