Python Reverse String – 5 способов и лучший из них

Строки Python не имеют встроенной функции reverse(). Однако существует несколько способов инвертировать строку в Python.

1. Как инвертировать строку в Python?

Некоторые из общих способов инвертирования строки:

  • Использование срезов для создания копии строки в обратном порядке.
  • Использование цикла for и добавление символов в обратном порядке
  • Использование цикла while для итерации по символам строки в обратном порядке и их добавления
  • Использование функции join() строки с итератором reversed()
  • Создание списка из строки, а затем вызов его функции reverse()
  • Использование Рекурсии

1.1) Инвертирование строки Python с помощью срезов

def reverse_slicing(s):
    return s[::-1]

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using slicing =', reverse_slicing(input_str))

Если вы запустите вышеуказанный сценарий Python, вывод будет следующим:

Reverse String using slicing = FE∂çBA

1.2) Перевернуть строку с помощью цикла For

def reverse_for_loop(s):
    s1 = ''
    for c in s:
        s1 = c + s1  # appending chars in reverse order
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using for loop =', reverse_for_loop(input_str))

Вывод: Перевернуть строку с использованием цикла for = FE∂çBA

1.3) Перевернуть строку с помощью цикла While

def reverse_while_loop(s):
    s1 = ''
    length = len(s) - 1
    while length >= 0:
        s1 = s1 + s[length]
        length = length - 1
    return s1

input_str = 'ABç∂EF'

if __name__ == "__main__":
    print('Reverse String using while loop =', reverse_while_loop(input_str))

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

def reverse_join_reversed_iter(s):
    s1 = ''.join(reversed(s))
    return s1

1.5) Перевернуть строку с помощью метода List reverse()

def reverse_list(s):
    temp_list = list(s)
    temp_list.reverse()
    return ''.join(temp_list)

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

def reverse_recursion(s):
    if len(s) == 0:
        return s
    else:
        return reverse_recursion(s[1:]) + s[0]

2. Лучший способ развернуть строку в Python

Мы можем развернуть строку с помощью нескольких алгоритмов. Мы уже видели шесть из них. Но какой из них следует выбрать для разворота строки. Мы можем использовать модуль timeit, чтобы выполнить несколько итераций этих функций и получить среднее время, необходимое для их выполнения. Все вышеуказанные функции хранятся в скрипте Python с названием string_reverse.py. Я выполнил все эти функции поочередно 100 000 раз с использованием модуля timeit и получил среднее значение лучших 5 запусков.

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_slicing("ABç∂EF"*10)'
100000 loops, best of 5: 0.449 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_list("ABç∂EF"*10)'
100000 loops, best of 5: 2.46 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_join_reversed_iter("ABç∂EF"*10)'
100000 loops, best of 5: 2.49 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_for_loop("ABç∂EF"*10)'
100000 loops, best of 5: 5.5 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_while_loop("ABç∂EF"*10)'
100000 loops, best of 5: 9.4 usec per loop

$ python3.7 -m timeit --number 100000 --unit usec 'import string_reverse' 'string_reverse.reverse_recursion("ABç∂EF"*10)'
100000 loops, best of 5: 24.3 usec per loop

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

Algorithm TimeIt Execution Time (Best of 5) Slowness
Slicing 0.449 usec 1x
List reverse() 2.46 usec 5.48x
reversed() + join() 2.49 usec 5.55x
for loop 5.5 usec 12.25x
while loop 9.4 usec 20.94x
Recursion 24.3 usec 54.12x

3. Сводка

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

Вы можете проверить полный скрипт Python и больше примеров на Python нашего репозитория GitHub.

4. Ссылки

Source:
https://www.digitalocean.com/community/tutorials/python-reverse-string