Гид по технологиям

Как перевернуть строку в Python

5 min read Python Обновлено 03 Jan 2026
Как перевернуть строку в Python — 2 метода
Как перевернуть строку в Python — 2 метода

Человек держит книгу по Python

Python предоставляет множество полезных функций для работы со строками, например casefold() для приведения к нижнему регистру. Однако встроенной функции, которая бы прямо «переворачивала» строку, нет. В статье рассмотрены два основных простых подхода и дополнительные практические замечания.

Один заголовок — один смысл

Ниже — понятные, короткие примеры и пояснения, когда какой способ выбрать, и что учесть при обработке Unicode.

Срез строки

Оператор среза (slice) извлекает часть строки с помощью трёх значений: start, stop и step. Синтаксис:

string[start:stop:step]

Чтобы получить строку в обратном порядке, достаточно указать шаг -1. Если не задавать start и stop, берётся вся строка по умолчанию.

Использование оператора среза для реверса строки

state = "California"  
  
print(state[::-1])  
  

Запуск приведённого кода выведет:

ainrofilaC  

Срез — кратко, читается как «всю строку, но в обратном порядке». В CPython этот вариант обычно самый быстрый для простых строк.

Реверс через reversed() и join()

Более читаемая альтернатива — использовать функции reversed() и “”.join() вместе. reversed() возвращает итератор, который перебирает последовательность в обратном порядке. Последующие вызовы join() объединяют элементы обратно в строку.

Пример с reversed()

state = "California"  
  
reversedState = reversed(state)  
     
for i in reversedState:  

    print(i)  
  

К сожалению, такой цикл выведет каждый символ на новой строке:

a  
  
i  
  
...  
  
C  
  

Использование join()

state = "California"  
  
reversedState = "".join(reversed(state))  
  
print(reversedState)  
  

Вывод будет:

ainrofilaC  

reversed() + join() делает явной идею «получаем итератор» и «объединяем», это полезно для читабельности, тестирования и когда нужен итератор (например, ленивый перебор).

Когда выбирать один метод над другим

  • Срез (string[::-1])
    • Плюсы: коротко, обычно быстрее, идиоматично для простых задач.
    • Минусы: может выглядеть непрозрачно для новичков.
  • reversed() + “”.join()
    • Плюсы: выразительно, легко понять шаги, безопасно в сложных конвейерах обработки.
    • Минусы: чуть более затратен по памяти/времени (создаёт промежуточные объекты).

Важно: для большинства практических задач выбор делайте по читаемости и контексту. В критичных по производительности местах измерьте обе реализации.

Unicode, комбинируемые символы и эмодзи

Обратите внимание: строки в Python — это последовательности кодовых точек (code points). Простое обращение порядка кодовых точек может «разрезать» комбинируемые символы (например, буквы с диакритикой) или эмодзи, состоящие из нескольких кодовых точек. В таких случаях результат может выглядеть неверно.

Пример проблемы: буква с комбинируемой диакритикой или сложный эмодзи могут разбиться при обычном реверсе.

Решение: оперировать не кодовыми точками, а графемными кластерами (grapheme clusters). Для этого часто используют стороннюю библиотеку regex (она расширяет возможности обычного re и поддерживает \X — графему).

Пример с библиотекой regex (требуется установка: pip install regex):

try:
    import regex as re
except ImportError:
    raise SystemExit("Установите пакет 'regex' для корректного реверса графем: pip install regex")

s = "a̐éö̲👍"
parts = re.findall(r"\X", s)
print("".join(reversed(parts)))

Этот подход гарантирует, что комбинированные символы и составные эмодзи не будут «порезаны».

Альтернативные подходы и пример через цикл

Если нужно — можно явно реализовать реверс через цикл (например, для обучения или кастомной логики):

def reverse_loop(s):
    result = []
    for ch in s:
        result.insert(0, ch)
    return "".join(result)

print(reverse_loop("California"))

Этот вариант понятен, но с точки зрения сложности и производительности не оптимален (insert(0, ch) в списке стоит дорого). Лучше собирать в список и затем reverse() или использовать append + reversed.

Сравнение методов

МетодЧитаемостьСкорость (общее правило)Поддержка Unicode графем
s[::-1]Коротко, средняяОбычно быстрееПлохо (работает на кодовых точках)
“”.join(reversed(s))ХорошоЧуть медленнееПлохо (работает на кодовых точках)
regex \X + joinПонятноЗависит от библиотекиХорошо (работает с графемами)
Явный циклПонятно новичкуЧаще всего медленнееПлохо/зависит от реализации

Критерии приёмки

  • Вход: произвольная строка s.
  • Ожидаемый базовый результат: символы в обратном порядке для обычных ASCII/латинских строк.
  • Дополнительный критерий: для мультиязычных строк с комбинируемыми символами — корректность зависит от выбранного метода (требуется тест с графемами при необходимости).

Примеры тестовых случаев:

  • “abc” -> “cba”
  • “A” -> “A”
  • “á” (буква + combining acute) -> сохраняет комбинированный символ как единый элемент при использовании regex \X
  • “👍🏻👍” -> корректный реверс при графемной обработке

Чеклист для разработчика и ревьюера

  • Нужен ли реверс на уровне кодовых точек или графем?
  • Есть ли требования по памяти/производительности?
  • Написаны ли тесты для эмодзи и комбинируемых символов?
  • Документирован ли выбранный метод для будущих читающих код?

Краткие рекомендации

  • Для простых строк используйте s[::-1].
  • Если важна читабельность и вы работаете с пайплайнами — используйте “”.join(reversed(s)).
  • Если строка может содержать сложные графемы или эмодзи — применяйте подход с regex \X или специализированными библиотеками для обработки графем.

Итог

Существует два основных простых способа реверса строки в Python: срез с шагом -1 и reversed() + join(). Оба подходят для большинства задач. Если важно корректно обрабатывать комбинированные символы и эмодзи, используйте графемную обработку через библиотеку regex или специализированные инструменты.

Ключевые выводы:

  • s[::-1] — кратко и быстро для обычных строк.
  • “”.join(reversed(s)) — более явный и читаемый вариант.
  • Для Unicode-графем используйте regex и \X.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство