Программисты часто сталкиваются с задачей удаления какого-нибудь символа из строки. Но иногда бывает нужно удалить не один символ, а целый список нежелательных символов. Например, специальных символов — для восстановления валидных паролей. Есть и другие ситуации, когда это может понадобиться. Давайте рассмотрим, каким образом можно решить такую задачу.
Метод 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