TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #3217 3.57K
Поздравляем победителей

Задачу об инверсии строки верно решили:

— Cool and Fun Python (@Python3k);
— Лев Выскубов;
— @sidor0912;
— @lomserman;
— @HackingSection;
— @VasilTerekin (засчитываю, хотя запрошена функция);
— @patriarch_chesslovo;
— @IvanImmortal;
— @Sentiago.

Кратчайшие верные решения предложили @patriarch_chesslovo:


VOWELS_LOWERCASE = set('aeoiuаоыуэяёиюе')

def invert_vowels(strng):
  reversed_vowels = (i for i in strng[::-1] if i.lower() in VOWELS_LOWERCASE)
  return ''.join([i if i.lower() not in VOWELS_LOWERCASE else next(reversed_vowels) for i in strng])


и @HackingSection:


def invert_vowels(s, vowels = "аяоёиыуюеэ"):
  vowelsInText = [j for j in s if j in vowels]
  return [vowelsInText.pop(-1) if i in vowels else i for i in s]


Отдельный респект Cool and Fun Python за разбор своего решения:


Предполагается, что все буквы в тексте строчные и русские. Иначе требуется доработать строку гласных.

У решения линейная асимптотика. Но если очень хочется, можно повысить быстродействие, превратив vowels в множество строк односимвольников: vowels = {'а', 'я', ...}

И преобразование строки в список и обратно - вынужденная мера. Строка в Python неизменяемая. Впрочем, на сохранение асимптотики O(N) это не влияет.

Кстати, если бы постановщик задачи гарантировал наличие гласных (всё же предлоги "в", "с" тоже считаются словами), можно было бы убрать проверки left < right в двух внутренних циклах.


Отдельная благодарность @lomserman за создание тестирующей функции:


def test(original: str, expected: str):
  result = invert_vowels(original)
  print(result)
  assert result == expected


p.s. Админ подписывается на всех ребятушек, что решают задачи. Если «провалиться» в профили решивших, там полно питонической годноты.

#задача

@zen_of_python
  • 🔥 6
  • 🍌 2
  • ❤ 1
More from @zen_of_python
  1. Oct 3, 2026Как вернуть значение из всплывающего окна в форму Django Admin Django Admin умеет создават…
  2. Oct 2, 2026Охрана трубопровода длиной 400 километров Камеры на столбах не заглянут за угол, дрон виси…
  3. Oct 1, 2026Как не сломать pickle собственным исключением Python Если конструктор исключения принимает…
  4. Oct 1, 2026Как выстроить защиту цепочки поставок Python Эшелонированная схема защиты начинается с соб…
  5. Sep 30, 2026Пакетная обработка в Python: где strict=True не спасает запись С Python 3.12 itertools.bat…
  6. Sep 30, 2026Как воспроизводить гонки потоков Python с помощью blanket Обычно порядок выполнения потоко…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →