> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/python-strings/python-obratnaya-stroka-rukovodstvo-po-reversirovaniyu-strok.md).

# Python Обратная Строка: Руководство по Реверсированию Строк

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

Может показаться, что в Python должен быть метод `string.reverse()`. Однако, поскольку строки в Python неизменяемы, этого не происходит.

К концу этого руководства вы узнаете следующее:

* Шесть различных способов перевернуть строку в Python
* Когда какой подход использовать

Оглавление

* [Нарезка строк Python: лучший способ перевернуть строку](#narezka-strok-python-luchshii-sposob-perevernut-stroku)
* [Пользовательская функция для удобства чтения при переворачивании строки Python](#polzovatelskaya-funkciya-dlya-udobstva-chteniya-pri-perevorachivanii-stroki-python)
* [Каков самый быстрый способ перевернуть строку в Python?](#kakov-samyi-bystryi-sposob-perevernut-stroku-v-python)
* [Другие способы перевернуть строку в Python](#drugie-sposoby-perevernut-stroku-v-python)
  * [Реверс строки Python с помощью цикла For](#revers-stroki-python-s-pomoshyu-cikla-for)
  * [Реверсирование строки Python с помощью цикла while](#reversirovanie-stroki-python-s-pomoshyu-cikla-while)
  * [Переверните строку с помощью обратной функции Python](#perevernite-stroku-s-pomoshyu-obratnoi-funkcii-python)
  * [Переверните строку Python с помощью рекурсии](#perevernite-stroku-python-s-pomoshyu-rekursii)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Нарезка строк Python: лучший способ перевернуть строку

**Лучший способ перевернуть строку в Python - использовать индексацию строк с шагом -1.** Например, используя строку, такую как `text='datagy'`, мы можем перевернуть её, используя `backward = text[::-1]`.

Обратите внимание на то, что нам необходимо было присвоить строку переменной (даже если мы присваивали ее самой себе). Поскольку строки в Python неизменяемы, без переприсваивания строки мы бы просто выполняли итерацию по ней.

```python
# Обратный порядок символов в строке Python: Индексирование строк
text = 'datagy'
backward = text[::-1]
print(backward)

# Возвращает: ygatad
```

**Как работает этот метод?** С помощью среза строки мы итерируем по каждому элементу строки в обратном порядке. По умолчанию срез работает в формате `[start:stop:step]`. Так как `start` и `stop` опущены, происходит индексация всей строки.

### Пользовательская функция для удобства чтения при переворачивании строки Python

Создание собственной функции может сделать ваш код более понятным. Если вы хотите ясно показать, что ваша цель - инвертировать строку, создание собственной функции может сделать эту цель очевидной.

Давайте разберемся, как можно создать пользовательскую функцию на Python для переворачивания строки.

```python
# Создание пользовательской функции для разворота строки
def reverse_string(text):
    if type(text) == str:
        return text[::-1]
    else:
        raise TypeError('Пожалуйста, передайте строку')

text = 'datagy'
backward = reverse_string(text)

print(backward)

# Возвращает: ygatad
```

Давайте разберемся, что мы делаем с помощью функции выше:

1. Мы определили функцию `reverse_string(text)`, которая принимает один аргумент. Мы назвали аргумент `text`, чтобы было понятно, что он должен принимать строку.
2. В функции сначала проверяется тип аргумента. Если это строка, используется индексация строки для возвращения текста в обратном порядке.
3. Если аргумент является строкой, вызывается исключение `TypeError` с пользовательским сообщением о том, что необходимо передать строку.

**Почему этот метод хорош?** Данный метод наглядно демонстрирует, как перевернуть строку. Это особенно полезно для начинающих, которым может потребоваться помощь в понимании кода.

### Каков самый быстрый способ перевернуть строку в Python?

В следующих разделах мы исследуем различные способы реверсирования строки в Python. Эти методы включены прежде всего для полноты охвата. Прежде чем перейти к этим методам, давайте выясним, какой из методов является самым быстрым.

| Метод          | Время для строки из 1000 символов (мкс) |
| -------------- | --------------------------------------- |
| String Slicing | 0.509                                   |
| reversed()     | 15.1                                    |
| While Loop     | 111                                     |
| For Loop       | 131                                     |
| Recursion      | 366                                     |

Мы видим, что срез строки - это, безусловно, самый быстрый способ её обращения. Фактически, он намного быстрее других вариантов (более чем в 700 раз быстрее самого медленного метода, рекурсии). Именно поэтому срез строки - это метод, который я бы рекомендовал больше всего.

### Другие способы перевернуть строку в Python

В следующих разделах вы узнаете, как перевернуть строку, используя другие методы. Я включил эти методы сюда только для полноты изложения. Я бы не рекомендовал использовать указанные ниже методы на практике. Тем не менее, они полезны для знания и могут пригодиться на собеседованиях по программированию.

#### Реверс строки Python с помощью цикла For

Поскольку строки в Python являются итерируемыми объектами (как это демонстрируется на нашем примере использования индексации строк), мы можем проходить по ним, используя цикл for в Python.

Используя цикл for, мы можем перебирать каждый символ в строке и создавать перевернутую строку. Давайте посмотрим, как выглядит этот процесс:

```python
# Разворачивание строки с помощью цикла for в Python
text = 'datagy'
reversed_string = ''

for character in text:
    reversed_string = character + reversed_string

print(reversed_string)

# Возвращает: ygatad
```

Давайте разберемся, как мы используем цикл for для инвертирования строки в Python:

1. Мы инициализируем строку (`text`) и пустую строку  (`reversed_string`)
2. Мы затем перебираем каждый символ в строке
3. Мы добавляем текущую перевернутую строку к символу цикла.
4. Наконец, мы печатаем перевернутую строку

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

```python
# Визуализация того, как это выглядит
text = 'datagy'
reversed_string = ''

for character in text:
    reversed_string = character + reversed_string
    print(reversed_string)

# Возвращает:
# d
# ad
# tad
# atad
# gatad
# ygatad
```

Мы видим, что каждый символ доступен, и текущие перевернутые части добавляются в конец этой строки.

#### Реверсирование строки Python с помощью цикла while

**Циклы while в Python** - это методы неопределенной итерации, что означает, что они будут продолжаться до тех пор, пока не будет выполнено условие. Давайте посмотрим, как мы можем использовать цикл while для реверсирования строки в Python:

```python
# Реверс строки с помощью цикла while
text = 'datagy'
reversed_string = ''
i = len(text) - 1

while i >= 0:
    reversed_string += text[i]
    i -= 1

print(reversed_string)

# Возвращает: ygatad
```

Этот пример выглядит немного сложнее, чем наш цикл for (и это действительно так!). Давайте посмотрим, что происходит за кулисами, чтобы понять, как работает этот подход:

1. Мы инициализируем три переменные: `text`, которая содержит нашу строку, `reversed_string`, которая является пустой строкой, и `i`, которая равна длине строки.
2. Затем мы создаем цикл `while`, который продолжает выполняться, пока значение `i` больше 0 (это означает, что еще остались символы).
3. Используем оператор присваивания с добавлением += для поочередного добавления символов с конца строки.
4. Наконец, мы отнимаем 1 от значения `i`, чтобы сдвинуться на один символ влево.

#### Переверните строку с помощью обратной функции Python

Python включает встроенную функцию `reversed()`, которая позволяет изменить порядок элементов в итерируемом объекте (например, в списке или строке) и возвращает объект с элементами в обратном порядке.

Мы можем использовать эту функцию вместе с методом `.join()` строки для возвращения строки в обратном порядке. Давайте посмотрим, как мы можем перевернуть строку, используя функцию `reversed().`

```python
# Реверс строки с помощью reversed()
text = 'datagy'
reversed_string = ''.join(reversed(text))

print(reversed_string)
# Возвращает: ygatad
```

В этом коде происходит довольно много, так что давайте разберём его по частям:

1. Мы создаем нашу строку в переменной `text`
2. Затем мы передаём строку в функцию `reversed()`
3. Наконец, мы объединяем объект обратно в строку, используя метод `.join()`

Это очень чистый метод, который хорошо работает. Особенно хорошо, что в него уже встроена обработка ошибок. Это означает, что если переданный объект не является итерируемым, будет вызвано исключение  `TypeError`

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

Python рекурсия может показаться сложным концептом, но это отличное понятие, которое стоит иметь в виду для собеседований по программированию. Признаюсь, я включаю этот пример в основном ради забавы. Я действительно не могу представить себе ситуацию, когда мне **когда-либо** понадобится использовать этот метод вне собеседования.

Давайте взглянем на то, как выглядит наш рекурсивный метод, а затем погрузимся в изучение его работы. Рекурсия работает, создавая функцию, которая вызывает сама себя, пока не достигнет базового случая.

```python
# Реверс строки в Python с помощью рекурсии
a_string = 'datagy'
def reverse_a_string(a_string):
    if len(a_string) == 1:
        return a_string
    return reverse_a_string(a_string[1:]) + a_string[:1]

reversed_string = reverse_a_string(a_string)
print(reversed_string)

# Возвращает: ygatad
```

В приведенном выше примере функция `reverse_a_string()` вызывает сама себя до тех пор, пока не будет достигнуто базовое условие (когда длина строки равна 1).

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

### Заключение

В этом уроке вы научились использовать Python для переворачивания строки. Это важный навык, который нужно знать, особенно на собеседованиях для начинающих программистов. Вы узнали лучший метод достижения этой цели - индексацию строк, и как превратить это в очень понятную функцию, чтобы помочь читателям вашего кода. Вы также изучили некоторые альтернативные методы, включая использование циклов for и while, а также методы списка и рекурсию.

Чтобы узнать больше об индексации строк в Python, ознакомьтесь с [официальной документацией здесь](https://docs.python.org/3/library/string.html).

### Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с ресурсами ниже:

* Как перевернуть список Python (6 способов)
* Python: перевернуть число (3 простых способа)
* Python List sort(): подробное руководство по сортировке списков
