Как работает str.replace с параметром count в Python

Как работает str.replace с параметром count в Python

@python_quiz

Разберем этот квиз

Кратко: метод str.replace(old, new, count) выполняет не перекрывающиеся замены слева направо и прекращает работу после достижения ограничения count. Дальше — разбор на примере.

Условие

Код:

python

Пошаговый разбор

Исходная строка: "aaaaa"

Ищем подстроку "aa" слева направо, замены не перекрываются.

  1. Первая найденная подстрока "aa" находится на позициях 0–1 (или [0:2]). Она заменяется на "b".

- После этой замены мы получаем: "b" + остаток оригинальной строки, начиная с позиции 2, то есть "aaa" => промежуточный результат: "baaa".

  1. Параметр count равен 1, значит дальше замен делать нельзя — алгоритм останавливается.

Итоговый вывод программы:

text

Проверка других значений count (демонстрация)

Чтобы лучше понять поведение, сравним несколько случаев:

python

Выводы:

  • Без count: будут выполнены все неперекрывающиеся замены → "bba"
  • count=1: только первая → "baaa"
  • count=2: две замены → "bba"

Обратите внимание: результат без count и при count=2 совпадают в этом примере, потому что в строке "aaaaa" есть ровно две неперекрывающиеся вхождения "aa" (на позициях 0–1 и 2–3).

Почему замены не перекрываются

Алгоритм при нахождении совпадения перемещает указатель вправо на длину найденной подстроки. Поэтому второе совпадение ищется уже после конца первого, а не с позиции 1 (не происходит перекрывания).

Если нужна замена перекрывающихся вхождений (редкий кейс), можно использовать регулярные выражения с lookahead:

python

(примечание: такие трюки с lookahead чаще требуют осторожности и тестирования — они меняют логику поиска вхождений)

Вывод

Метод str.replace с третьим аргументом выполняет указанное число неперекрывающихся замен слева направо. В конкретном примере с s = "aaaaa" и count = 1 результат — "baaa".

Report Page