← Назад к вопросам

Удаление символа из строки

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() — наиболее эффективен для удаления»)

Рекомендации

  1. Для простых случаев: используйте replace() — просто, быстро, понятно
  2. Для сложной логики: используйте join() + list comprehension
  3. Для специальных символов: экранируйте в regex или используйте replace()
  4. Для производительности на больших строках: используйте 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)
Удаление символа из строки | PrepBro