← Назад к вопросам
Удаление символа из строки
1.2 Junior🔥 261 комментариев
#Python Core
Условие
Напишите функцию, которая удаляет все вхождения указанного символа из строки.
Пример
remove_char("hello world", "o") → "hell wrld" remove_char("banana", "a") → "bnn"
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Удаление символа из строки
Задача: удалить все вхождения указанного символа из строки. Это базовая операция обработки строк, которая часто встречается в разработке.
Решение 1: Метод replace()
def remove_char(string, char):
"""Удалить все вхождения символа из строки."""
return string.replace(char, "")
# Примеры
print(remove_char("hello world", "o")) # hell wrld
print(remove_char("banana", "a")) # bnn
print(remove_char("aaaaaa", "a")) # (пустая строка)
print(remove_char("test", "x")) # test (символ не найден)
Решение 2: Список (list comprehension)
def remove_char_v2(string, char):
"""Удалить символ через list comprehension."""
return "".join(c for c in string if c != char)
# Примеры
print(remove_char_v2("hello world", "o")) # hell wrld
print(remove_char_v2("banana", "a")) # bnn
print(remove_char_v2("test", "x")) # test
Решение 3: Метод filter()
def remove_char_v3(string, char):
"""Удалить символ через filter()."""
return "".join(filter(lambda c: c != char, string))
# Примеры
print(remove_char_v3("hello world", "o")) # hell wrld
print(remove_char_v3("banana", "a")) # bnn
Решение 4: Регулярные выражения
import re
def remove_char_v4(string, char):
"""Удалить символ через регулярные выражения."""
# Экранируем специальные символы regex
return re.sub(re.escape(char), "", string)
# Примеры
print(remove_char_v4("hello world", "o")) # hell wrld
print(remove_char_v4("banana", "a")) # bnn
# Работает и со специальными символами regex
print(remove_char_v4("a.b.c", ".")) # abc
print(remove_char_v4("a*b*c", "*")) # abc
Сравнение подходов
import timeit
test_string = "hello world" * 1000
test_char = "o"
# Измеряем производительность
method1_time = timeit.timeit(
lambda: test_string.replace(test_char, ""),
number=10000
)
method2_time = timeit.timeit(
lambda: "".join(c for c in test_string if c != test_char),
number=10000
)
method3_time = timeit.timeit(
lambda: "".join(filter(lambda c: c != test_char, test_string)),
number=10000
)
print(f"replace(): {method1_time:.4f} сек")
print(f"join() + list comprehension: {method2_time:.4f} сек")
print(f"filter(): {method3_time:.4f} сек")
print("\nВыводы:")
print("1. replace() — самый быстрый (встроенный метод на C)")
print("2. list comprehension — очень быстро и понятно")
print("3. filter() — понимаемо функционально")
Продвинутые варианты
Удаление первого вхождения
def remove_first(string, char):
"""Удалить только первое вхождение символа."""
idx = string.find(char)
if idx == -1:
return string
return string[:idx] + string[idx + 1:]
# Альтернатива с replace
def remove_first_v2(string, char):
return string.replace(char, "", 1) # count=1
print(remove_first("hello", "l")) # helo
print(remove_first_v2("hello", "l")) # helo
Удаление N вхождений
def remove_n_chars(string, char, count):
"""Удалить первые N вхождений символа."""
return string.replace(char, "", count)
print(remove_n_chars("hello world", "o", 1)) # hell world
print(remove_n_chars("hello world", "o", 2)) # hell wrld
print(remove_n_chars("hello world", "l", 2)) # heo world
Удаление множества символов
def remove_chars(string, chars):
"""Удалить несколько символов из строки."""
char_set = set(chars)
return "".join(c for c in string if c not in char_set)
print(remove_chars("hello world", "aeiou")) # hll wrld
print(remove_chars("python", "aeiou")) # pythn
# Альтернатива через translate
def remove_chars_v2(string, chars):
translator = str.maketrans("", "", chars)
return string.translate(translator)
print(remove_chars_v2("hello world", "aeiou")) # hll wrld
Граничные случаи
def test_remove_char():
test_cases = [
("hello world", "o", "hell wrld"),
("banana", "a", "bnn"),
("aaaaaa", "a", ""),
("test", "x", "test"),
("", "a", ""),
("a", "a", ""),
("a", "b", "a"),
("hello", "e", "hllo"),
(" ", " ", ""),
]
for string, char, expected in test_cases:
result = string.replace(char, "")
assert result == expected, f"Ошибка: remove_char({repr(string)}, {repr(char)}) = {repr(result)}, ожидается {repr(expected)}"
print(f"✓ remove_char({repr(string)}, {repr(char)}) = {repr(result)}")
print("\nВсе тесты пройдены!")
test_remove_char()
Производительность для больших строк
import timeit
# Генерируем большую строку
large_string = "a" * 100000 + "b" * 100000
# Метод 1: replace()
time1 = timeit.timeit(
lambda: large_string.replace("a", ""),
number=100
)
# Метод 2: join + comprehension
time2 = timeit.timeit(
lambda: "".join(c for c in large_string if c != "a"),
number=100
)
# Метод 3: translate (самый быстрый для больших строк)
time3 = timeit.timeit(
lambda: large_string.translate(str.maketrans("", "", "a")),
number=100
)
print(f"replace(): {time1:.4f} сек")
print(f"join(): {time2:.4f} сек")
print(f"translate(): {time3:.4f} сек")
print("\ntranslate() — наиболее эффективен для удаления»)
Рекомендации
- Для простых случаев: используйте
replace()— просто, быстро, понятно - Для сложной логики: используйте
join()+ list comprehension - Для специальных символов: экранируйте в regex или используйте
replace() - Для производительности на больших строках: используйте
translate()
# Финальное решение (рекомендуется)
def remove_char(string, char):
"""Удалить все вхождения символа из строки."""
return string.replace(char, "")
# Если нужна гибкость:
def remove_char_flexible(string, char):
"""Удалить символы с поддержкой regex."""
if isinstance(char, str) and len(char) == 1:
return string.replace(char, "")
# Для сложных случаев
return "".join(c for c in string if c != char)