5 экспертных способов перевернуть строку в Python
Строка в Python — это упорядоченная последовательность символов. Часто возникает задача развернуть строку (например, для проверки палиндромов). Встроенной функции reverse() у строк нет, но есть несколько эффективных методов.
Способ 1: Цикл for
Классический подход — накапливать символы в новую строку в обратном порядке.
def reverse_string(s):
reversed_str = ""
for char in s:
reversed_str = char + reversed_str
return reversed_str
string = "Guru99"
print(f"Исходная: {string}")
print(f"Перевёрнутая: {reverse_string(string)}")
Вывод:
Исходная: Guru99 Перевёрнутая: 99uruG
Разбор: На каждой итерации текущий символ добавляется в начало новой строки.
Способ 2: Цикл while
Используем индекс, идущий от конца к началу.
string = "Python"
reversed_str = ""
count = len(string)
while count > 0:
reversed_str += string[count - 1]
count -= 1
print(f"Перевёрнутая: {reversed_str}")
Вывод: nohtyP
Способ 3: Срезы (Slicing) — самый питоничный
Синтаксис [::-1] создаёт копию строки в обратном порядке.
def reverse(s):
return s[::-1]
string = "Let's guru99"
print(f"Перевёрнутая: {reverse(string)}")
Вывод: 99urug s'teL
Это самый быстрый и идиоматичный способ в Python.
Способ 4: Функция reversed() + join()
reversed() возвращает итератор в обратном порядке, join() собирает в строку.
def reverse(s):
return "".join(reversed(s))
print(reverse("guru99")) # 99urug
Способ 5: Рекурсия
Функция вызывает сама себя, отрезая первый символ и добавляя его в конец.
def reverse(s):
if len(s) == 0:
return s
return reverse(s[1:]) + s[0]
print(reverse("I love guru99")) # 99urug evol I
Осторожно: При очень длинных строках возможен RecursionError (превышение глубины рекурсии).
Сравнение производительности
| Метод | Скорость | Память | Читаемость |
|---|---|---|---|
Срез [::-1] | Очень быстро | O(n) | Отличная |
reversed() + join() | Быстро | O(n) | Хорошая |
| Цикл for / while | Медленнее | O(n) | Хорошая |
| Рекурсия | Медленно | O(n²) из-за конкатенации | Средняя |
Заключение
- Для продакшн-кода используйте срезы
[::-1]— это быстро, читаемо и идиоматично. reversed() + join()— отличная альтернатива, понятная новичкам.- Циклы и рекурсия полезны для обучения алгоритмам, но не для реальных задач.
- Выбор метода зависит от контекста: обучение, производительность или читаемость.
Python
- Мастерство Django: руководство для начинающих по особенностям, архитектуре и истории
- Установка PIP в Windows: полное пошаговое руководство
- Строки в Python: создание, форматирование и манипуляции
- Модуль calendar в Python: экспертное руководство с примерами кода
- Понимание type() и isinstance() в Python: практические примеры
- Сетевое программирование в Python: сокеты и продвинутые протоколы
- Ускоренные пути обучения Python: от новичка к профи с Real Python
- Hello World: создание вашего первого Python-приложения
- Операторы в Python: Арифметические, сравнения, логические и битовые
- Словари в Python: Основы работы с ключами, значениями и доступом