Share This
Связаться со мной
Крути в низ
Categories
//Как перевернуть строку в Python

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

21.11.2021Category : Python

Когда мы работаем со строками в Python, бывают случаи, когда нам нужно их перевернуть и работать с их перевернутыми копиями. Но поскольку строки в Python неизменяемы, мы не можем просто взять и перевернуть их. Сегодня мы обсудим, как же все-таки это сделать.

В Python есть несколько способов перевернуть строку. В этом руководстве мы рассмотрим:

  • Реверсирование строк с помощью рекурсии. Мы поговорим о том, как работает рекурсия, и о логике, лежащей в основе «переворачивания» строк с ее помощью.
  • Использование срезов для переворота строк. Обсудим гораздо более простой способ перевернуть строку в Python.
  • Использование встроенных методов. Разберем еще один простой и интуитивно понятный способ перевернуть строку в Python.

Итак, приступим!

Как перевернуть строку в Python с помощью рекурсии

Чтобы использовать рекурсию для реверсирования строк, для начала нужно понимать, как работает рекурсия.

Рекурсия – это мощный инструмент в программировании. Рекурсивная функция вызывает себя несколько раз, пока не будет достигнут базовый вариант.

Вероятно, вы уже читали нечто подобное, когда изучали тему рекурсии.

Давайте перефразируем это определение простым языком.

Рекурсия простыми словами

Предположим, вы создали функцию для решения какой-то проблемы. Функция разработана таким образом, что каждый раз при вызове она вызывает сама себя снова и снова. Это называется рекурсивными вызовами функции.

Каждый рекурсивный вызов функции выполняет одну и ту же небольшую работу. И так продолжается до тех пор, пока эта работа не закончится. Тогда функции больше не нужно вызывать себя – это называется базовым случаем.

kak perevernut stroku v python 8322706 - Как перевернуть строку в Python

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

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

Давайте теперь обсудим логику переворачивания строк. Для этого рассмотрим строку code.

Итак, наша задача – перевернуть строку code.

kak perevernut stroku v python 6caae9a - Как перевернуть строку в Python

Давайте на время забудем о рекурсии и начнем с того, что мы уже знаем.

Первая буква исходной строки будет последней буквой в перевернутой строке, верно? Так что давайте вытащим первую букву – в данном случае с – и поставим её в самый конец.

Теперь у нас осталась строка ode. И проблема свелась к переворачиванию данной подстроки ode (поскольку c уже находится в нужном месте).

kak perevernut stroku v python 728313b - Как перевернуть строку в Python

Теперь проделаем ту же самую задачу, снова вытащив первую букву, теперь о. И переместим её в последний доступный слот справа, перед с.

Теперь, когда мы позаботились о c и o, у нас осталась проблема переворачивания подстроки de.

kak perevernut stroku v python 99ed5f6 - Как перевернуть строку в Python

Сделаем это еще пару раз – вытащим сначала d, а затем и e.

kak perevernut stroku v python 2670b55 - Как перевернуть строку в Python

Теперь у вас осталось перевернуть “” – пустую строку.

kak perevernut stroku v python 81b2b00 - Как перевернуть строку в Python

Таким образом, мы поместили «e», «d», «o» и «c» в правильные позиции, и нам больше не нужно ничего делать. В контексте рекурсии мы достигли базового случая.

Что мы здесь сделали?

  1. На каждом шаге мы выполняли одну и ту же задачу – вытаскивали первую букву из каждой последующей подстроки.
  2. И уменьшали исходную задачу до переворота строки, которая на одну букву короче, чем была раньше.

Когда мы остановились?

Когда строка стала пустой – не осталось букв, которые нужно было вытаскивать.

На иллюстрации ниже показано, что мы сделали:

kak perevernut stroku v python 668cf30 - Как перевернуть строку в Python

Теперь, когда мы разобрались, как на самом деле работает реверсирование строк с использованием рекурсии, давайте напишем код.

Рекурсия для реверсирования строк

Давайте напишем функцию reverseString(), которая делает именно то, что мы сделали выше. Функция reverseString() принимает any_string и возвращает перевернутую копию any_string.

def reverseString(any_string):     if any_string == "":         return any_string     else:         return reverseString(any_string[1:]) + any_string[:1]

Давайте разберем, как работает рекурсия, когда вы вызываете функцию reverseString().

reverseString("code")  # Output # 'edoc'

Скажем, мы вызываем функцию reverseString() со строкой code в качестве аргумента. Это, в свою очередь, вызывает reverseString() с аргументом ode. Дальше снова вызывается reverseString(), но уже с аргументом de. И всё это продолжается до тех пор, пока, наконец, не будет выполнен вызов функции reverseString() с пустой строкой “” в качестве аргумента.

Это объясняется на изображении ниже:

kak perevernut stroku v python 4e03fdb - Как перевернуть строку в Python

Вы знаете, что, когда выполняется вызов функции с аргументом “”, функция возвращает “” в сочетании с “e”.

Следующий вызов возвращает ed, а следующий – edo. И дальше, наконец-то, мы получаем edoc – желаемую перевернутую строку.

Для удобства чтения можно опустить ситуацию склеивания “” и е на иллюстрации ниже. Также возвращаемые значения из предыдущего вызова были обозначены зеленым внутри стека вызовов.

kak perevernut stroku v python b1217f8 - Как перевернуть строку в Python

Теперь вы можете вызвать reverseString() с любой допустимой строкой Python. Вот еще несколько примеров:

reverseString("Python")  # Output: # nohtyP  reverseString("Python Reverse String")  # Output: # gnirtS esreveR nohtyP

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

От редакции Pythonist. Рекомендуем статью «Примеры программ с использованием рекурсии на языке Python».

В следующих двух разделах мы рассмотрим более простые способы переворачивания строк. Итак, поехали!

Как перевернуть строку в Python с помощью срезов

Вы также можете перевернуть строку в Python, используя срезы. В Python строки можно «резать» точно также, как и списки.

Срезы строк в Python

<string>[start: stop: step] возвращает фрагмент строки <string>, начиная с начального индекса (start), до индекса stop – 1, с шагом step.

Вот несколько моментов о строках, о которых стоит помнить:

  • <string> – любая допустимая строка Python.
  • Начальный индекс не является обязательным. Если вы не укажете его, по умолчанию срез начинается с начала строки, т.е с индекса 0.
  • Стоп-индекс также не является обязательным. Если вы не укажете его, по умолчанию срез будет до конца строки, т.е. до последнего элемента.
  • Необязательный аргумент step определяет то, как вы хотите разрезать <string>. Если мы установим step = 2, срез будет начинаться с начала строки, заканчиваться на stop – 1 и включать каждый второй символ в строке, т.е. мы будем идти с шагом 2.

Таким образом, выражение <string>[:::] возвращает нам просто исходную строку.

Давайте посмотрим внимательнее:

  • без начального индекса срез начинается с индекса 0
  • без конечного индекса срез продолжается до последнего символа в строке
  • не указывая аргумент step, мы получаем срез, который включает все символы в строке

Однако, не стоит забывать, что вы также можете установить и отрицательные значения для шага. А отрицательные значения будут возвращать фрагменты строки, начиная с конца строки.

Установка step = -1 возвращает нам фрагмент строки, начиная с последнего символа и заканчивая первым символом. При этом не пропускается ни один символ.

Подождите, разве это не перевернутая строка? Да, это именно она и есть!

Итак, выражение <string>[::-1] возвращает перевернутую копию строки. Проще простого, не так ли?

any_string = "Python"  rev_string = any_string[::-1]  print(rev_string)  # Output # nohtyP

Перейдем к следующему разделу, чтобы узнать еще один простой способ перевернуть строку.

Как перевернуть строку в Python с помощью методов reversed() и join()

Для начала посмотрим, что делает метод reversed().

Функция reversed() возвращает обратный итератор, то есть возвращает итератор, который перебирает элементы оригинала в обратном порядке.

any_string = “Python”

Давайте используем метод reversed(), чтобы получить символы any_string в обратном порядке:

for char in reversed(any_string):     print(char)  # Output: # n # o # h # t # y # P

Теперь, когда у нас есть все символы в обратном порядке, нам нужно собрать их в строку. Дело в том, что метод reversed() возвращает символы по одному. Объединить их мы сможем с помощью метода join().

<sep>.join(<these>) объединяет <these> в строку, используя <sep> в качестве разделителя.

В нашем случае <these> – это полученные символы в обратном порядке.

Но каким должен быть <sep>? Что ж, в данном случае нам не нужен разделитель – нам нужно, чтобы все символы входили в строку с правильными индексами.

Так что же тогда делать? Просто вставьте “” вместо <sep>, как показано ниже:

"".join(reversed(any_string)) # Output # nohtyP

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

" ".join(reversed(any_string)) # Output # n o h t y P

Итак, мы разобрали еще один питонический способ перевернуть строку.

Заключение

Итак, мы разобрали три способа перевернуть строку в Python.

Первый способ — с применением рекурсии. Два других — более «питонические». Чтобы получить обратную копию <string>, можно использовать срез строки <string>[:: – 1] или “”.join(reversed(<string>)).

Надеюсь, вы нашли этот урок полезным и интересным. Успехов в написании кода!

Перевод статьи «Python Reverse String – String Reversal in Python Explained with Examples».

kak perevernut stroku v python 0d46b15 - Как перевернуть строку в Python

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

  • 1 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2020 / All rights reserved

    Связаться со мной
    Close