Логика работы оператора in в строках содержащих скобочную последовательность: "(), {}, []"

Столкнулся с задачей для новичков "Скобочная последовательность", в которой нужно определить, является ли входная строка допустимой. Задачу решил, но с помощью кода, который нашёл в итнернете!

def is_valid(text: str) -> bool:
    while '()' in text or '[]' in text or '{}' in text:
        text = text.replace('()', '')
        text = text.replace('[]', '')
        text = text.replace('{}', '')
    return not text

Так вот чём вопрос: почему при таком расположении скобок (text = "({}){[}]") в строке функция выдаёт False? Ведь тут открывающие скобки равны по количеству закрывающим? Каким образом происходит проверка правильной последовательности скобок и замена на пустое значение при такой конструкции? В документации ничего об этом не нашёл(


Ответы (1 шт):

Автор решения: Voloading

Условие в цикле проверяет на вхождение () - False, [] - False, {} -True заменяет {} на ''. Получаем "(){[}]". второй заход () - True, [] - False, {} - False. Заменяет (). Получаем "{[}]". () - False, [] - False, {} - False Цикл закончен. В переменной осталась строка "{[}]". выводится False т.к. выражение "{[}]" - это не строка является ложным.

→ Ссылка