Чтобы развернуть строку в Python, можно использовать срез с отрицательным шагом:
str[::-1]
Например, давайте обратим строку "Testing"
:
s = "Testing" # Используем отрицательный шаг для разворота строки rev = s[::-1] print(rev) # Результат: # gnitseT
В этой статье мы рассмотрим пять способов развернуть строку в Python. Но имейте в виду, что приведенный выше пример – наилучший. Остальные методы полезны скорее для оттачивания навыков работы с Python.
Как развернуть строку в Python
Итак, давайте разберем подробнее наш первый способ разворота строки, а затем еще четыре. Только помните, что срез с отрицательным индексом – это самый короткий и наиболее питоничный подход. Используйте его, если только обстоятельства не вынуждают вас воспользоваться другим способом.
1. Разворот строки при помощи среза с отрицательным индексом
Самый быстрый и простой способ развернуть строку в Python – использовать срез с отрицательным индексом [::-1]. Вот функция, которая разворачивает строку с помощью среза:
def reverse_slicing(s): return s[::-1]
Давайте рассмотрим подробнее, как работает эта функция.
Срезы позволяют получить доступ к элементам итерируемых объектов. Например, с помощью среза можно получить 5 первых значений списка или последние 10 символов строки. Синтаксис среза:
iterable[start:end:step]
Здесь:
- iterable – итурируемый объект, например, строка
- start – индекс начала среза
- end – индекс конца среза (элемент под этим индексом в срез не входит)
- step – размер шага среза. Значение по умолчанию равно 1
Все три значения могут быть отрицательными.
Удобной особенностью срезов является то, что значения start/end/step можно не указывать. Если вы не укажете начало среза, он начнется с первого элемента итерируемого объекта. Если не укажете конец – срез закончится последним элементом.
Отрицательный шаг меняет направление среза. Таким образом, нотация string[::-1]
означает, что в срез войдут все элементы string
, от первого до последнего, но в обратном порядке.
2. Как развернуть строку в цикле
Развернуть строку можно и иначе, например, при помощи цикла for
или while
. В обоих случаях идея одна и та же:
- Инициализация пустой результирующей строки.
- Перебор всех символов исходной строки.
- Добавление каждого символа в начало результирующей строки
2.1. Разворот строки при помощи цикла for
Вот функция, которая разворачивает строку с использованием цикла for
:
def reverse_for_loop(s): s1 = "" for c in s: s1 = c + s1 return s1
2.2. Разворот строки при помощи цикла while
Вот функция, которая для реверсирования строки использует цикл while
:
def reverse_while_loop(s): s1 = "" l = len(s) - 1 while l >= 0: s1 += s[l] l -= 1 return s1
3. Как развернуть строку при помощи reversed() и str.join()
В Python есть встроенная функция reversed()
, которую можно вызывать для итерируемых объектов, таких как строки или списки. Чтобы развернуть строку, необходимо скомбинировать этот метод с методом str.join()
.
Вот функция, которая вызывает функцию reversed()
в сочетании с методом .join()
:
def reverse_with_join(s): return "".join(reversed(s))
Функция reversed()
принимает строку и возвращает специальный объект reversed
, который хранит символы в обратном порядке. Обратите внимание, что в результате получается не строка, а объект-итератор.
Чтобы преобразовать перевернутые символы в строку, можно вызвать метод str.join()
, используя в качестве разделителя пустую строку. Метод join()
берет символы из объекта reversed
и объединяет их в строку, которая является перевернутой версией исходной строки.
4. Разворот строки при помощи list.reverse()
Еще один способ развернуть строку – преобразовать ее в список символов, развернуть список и снова преобразовать его в строку.
Вот функция, которая для разворота строки использует метод list.reverse()
:
def reverse_with_list(s): s_as_list = list(s) s_as_list.reverse() return "".join(s_as_list)
Давайте разберем код, чтобы вы могли лучше понять, что происходит:
- Сначала вы преобразуете строку в список символов
- Затем вы вызываете метод
list.reverse()
для символов. Это меняет их порядок следования - Наконец, вы преобразуете перевернутый список символов обратно в строку
5. Как развернуть строку при помощи рекурсии
И, наконец, можно отработать навыки рекурсии, перевернув строку с помощью рекурсивной функции (функции, которая вызывает сама себя).
Вот пример реализации функции, которая рекурсивно переворачивает строку:
def reverse_recursively(s): if len(s) == 0: return s else: return reverse_recursively(s[1:]) + s[0]
Идея этой функции очень похожа на подход цикла while
, который вы видели ранее. Кроме того, в ней используется срез для доступа ко всем буквам строки, кроме первой.
Сравнение производительности
Вот сравнение производительности вышеуказанных методов для разворота строк в Python.
Чтобы повторить тесты производительности в вашей системе:
- Создайте файл Python с именем
reverse_strings.py
- Скопируйте и вставьте в этот файл все методы реверсирования строк
- Откройте окно командной строки или терминал
- Запустите приведенные ниже команды терминала, чтобы посмотреть время выполнения
$ python3 -m timeit --number 100000 --unit usec 'import reverse_strings' 'reverse_strings.reverse_slicing("This is just a tests")' 100000 loops, best of 5: 0.377 usec per loop $ python3 -m timeit --number 100000 --unit usec 'import reverse_strings' 'reverse_strings.reverse_for_loop("This is just a tests")' 100000 loops, best of 5: 1.84 usec per loop $ python3 -m timeit --number 100000 --unit usec 'import reverse_strings' 'reverse_strings.reverse_while_loop("This is just a tests")' 100000 loops, best of 5: 2.94 usec per loop $ python3 -m timeit --number 100000 --unit usec 'import reverse_strings' 'reverse_strings.reverse_with_join("This is just a tests")' 100000 loops, best of 5: 1.01 usec per loop $ python3 -m timeit --number 100000 --unit usec 'import reverse_strings' 'reverse_strings.reverse_with_list("This is just a tests")' 100000 loops, best of 5: 0.87 usec per loop $ python3 -m timeit --number 100000 --unit usec 'import reverse_strings' 'reverse_strings.reverse_recursively("This is just a tests")' 100000 loops, best of 5: 6.29 usec per loop
Как видите, проще всего развернуть строку с помощью среза с отрицательным шагом (str[::-1]
).
Заключение
Сегодня вы узнали, как развернуть строку в Python. Для этого можно использовать срез с отрицательным шагом (предпочтительный метод), циклы for и while, конвертацию строки в список и обратно, встроенные функции Python, а также рекурсию. При этом использование среза – самый простой и, к тому же, самый эффективный способ обратить строку.
Спасибо за внимание. Успешного кодинга!
Перевод статьи Artturi Jalli “5 Ways to Reverse a String in Python (Example Program)”.