Перейти к содержимому

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

  • автор:

5 способов перевернуть строку в Python 3

Создадим функцию reversed1 с аргументом variable , где variable — переменная, хранящая строку, которую мы хотим перевернуть. Так как строка являются неизменяемым объектом, то создадим отдельную, пока что пустую переменную res , которая в будущем будет хранить результат.

def reversed1(variable): res=''

В функцию поместим цикл, который будет «прохаживаться» по каждому из элементов строки. Начнем мы с конца строки, используя положительные индексы, соответственно параметр start функции range — len(variable)-1 . -1 потому, что длина строки всегда на 1 больше, чем индекс последнего ее элемента. Закончить мы должны на первом символе строки, поэтому параметр stop функции range() — -1, поскольку перечисляются числа до значения этого параметра, не включительно. Параметр step — -1, потому что мы считаем в обратном порядке.

def reversed1(variable): res='' for i in range(len(variable)-1,-1,-1): pass

Теперь заполним тело цикла — проведем конкатенацию между старым значением res и элементом строки с индексом i . Таким образом, при каждой итерации цикла мы добавляем по одному символу к результату. После окончания цикла вернем результат.

def reversed1(variable): res='' for i in range(len(variable)-1,-1,-1): res+=variable[i] return res n = reversed1(input()) print(n)

2. Использование цикла со списком в результате

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

Вместо конкатенации можно использовать метод append() , с помощью которого мы добавляем элемент, указанный в качестве аргумента к методу, в конец списка. Итак, мы получили:

def reversed2(variable): res=[] for i in range(len(variable)-1,-1,-1): res.append(variable[i]) return res

Функция пока что возвращает список, состоящий из односимвольных элементов. Если нас это не устраивает, то почему бы не преобразовать список в строку при помощи метода join() ? Сделаем это, добавив конструкцию res=».join(res) .

def reversed1(variable): res=[] for i in range(len(variable)-1,-1,-1): res.append(variable[i]) res=''.join(res) return res n = reversed1(input()) print(n)

3. Рекурсия

Третий в нашем обзоре способ — рекурсия, как всегда трудная для понимания. Как всегда создаем функцию, но не спешим помещать туда цикл.

Начну объяснение с конца. Если мы записали в результат все символы кроме первого, то длина оставшейся строки равна единице и, следовательно, ее нужно вернуть. Получаем:

def reversed3(variable): if len(variable) == 1: return variable

Но если длина строки больше одного, то нужно вернуть последний из ее элементов и вызвать эту же функцию, но уже отрезав последний символ. Сделать это мы можем с помощью среза variable[:-1] . Обновим картину:

def reversed3(variable): if len(variable) == 1: return variable else: return variable[-1] + reversed3(variable[:-1])

Использование else: здесь необязательно, так как после возвращения чего-либо этой функцией она завершится. Поэтому конструкцию return variable[-1] + reverse3(variable[:-1]) можно поместить напрямую в тело функции. Конечный вариант решения:

def reversed3(variable): if len(variable) == 1: return variable return variable[-1] + reversed3(variable[:-1]) n = reversed3(input()) print(n)

4. Использование встроенной функции

В Python 3 встроена специальная функция reversed() , в качестве аргумента она принимает список или строку, а возвращает итератор последовательности значений, состоящей из всех элементов аргумента в обратном порядке.

Простыми словами — недостаточно написать res = reversed(variable) , данные нужно преобразовать в нужный тип (в нашем случае — в строку). Сделать мы это можем при помощи метода join() , соединив последовательность через пустую строку. После выполненных действий возвращаем результат. Код:

def reversed4(variable): res=''.join(reversed(variable)) return res n = reversed4(input()) print(n)

5. Срез строки

Можете представить способ перевернуть строку, который был бы короче названия функции? А я могу!

Срез строки — вещь прекрасная, но порой пугающая новичков «уплотненным» синтаксисом. Срез содержит три параметра — [start:stop:step], аналогично функции range() . Подробнее о них вы можете прочитать в других статьях на Хабре.

Для способа с использованием срезов не нужно даже создавать функцию, только зря строки и время потратите. Все элементарно — присвоим параметру step значение -1 и пропустим два других параметра, происходит магия — строка переворачивается:

n = input()[::-1] print(n)

Конечно, никакой магии здесь нет, мы просто перебираем символы с шагом -1, то есть в обратном порядке.

Заключение

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

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

Четвертый способ довольно быстрый, отлично читается и подходит во многих случаях.

Пятый способ — самый быстрый, хорошо читается, очень краткий (6 символов), поэтому его я считаю наиболее предпочтительным.

Сравнительную таблицу скорости некоторых способов вы можете найти по ссылке — https://python-scripts.com/reversed

Если знаете что-либо еще по этой теме, хотите меня поправить или дать идею — пишите в комментариях, я все прочту и приму к сведению. Удачи!

Три элегантных способа перевернуть строку в Python

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

Строка Python в перевернутом виде выглядит как nohtyP.

Существует три способа перевернуть строку.

1. Срезы

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

Делается это так:

stringname[stringlength::-1] # метод 1

Длиной строки можно и пренебречь:

stringname[::-1] # метод 2

В этом случае подразумевается, что первый аргумент — длина строки. Заканчивается он на индексе 0, а шаг — -1 (то есть, шаг назад).

str="pythonist" # исходная строка stringlength=len(str) # вычисление длины строки slicedString=str[stringlength::-1] # срез print (slicedString) # вывод в консоль перевернутой строки
tsinohtyp

2. Цикл

Мы можем перевернуть строку и в цикле.

Для начала создадим массив (список) reversedString[] .

После этого мы можем запустить цикл, где итерируемой переменной будет index — длина списка.

На каждой итерации цикла в reversedString добавляется символ из строки с индексом [index-1] . После этого index уменьшается на 1.

Цикл продолжается до тех пор, пока переменная index не станет равна 0.

str = "pythonist" # исходная строка reversedString=[] index = len(str) # вычисляем длину строки и сохраняем ее в переменной index while index > 0: reversedString += str[ index - 1 ] # сохраняем значение str[index-1] в reverseString index = index - 1 # уменьшаем значение index на 1 print(reversedString) # перевернутая строка
['t', 's', 'i', 'n', 'o', 'h', 't', 'y', 'p']

3. Метод join()

Это мощный метод, использующий протокол итератора Python. Этот способ работает следующим образом. Строка поворачивается путем обратной итерации при помощи метода reversed(). После этого происходит объединение символов в новую строку при помощи метода join().

Синтаксис выглядит так:

str="pythonist" reversedstring=''.join(reversed(str))
str = 'pythonist' # исходная строка reversed=''.join(reversed(str)) # метод .join() объединяет все символы, полученные в результате обратной итерации, в новую строку print(reversed) # вывод перевернутой строки

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

Стандартной функции для этой операции в Python нет. Но вариантов перевернуть строку несколько.

Переворачиваем строку в цикле:

>>> word = 'hello' >>> reversed_string = '' >>> for char in word: . reversed_string = char + reversed_string >>> reversed_string 'olleh' >>> 

Используем метод join() , чтобы собрать в строку перевёрнутый список:

>>> word = 'hello' >>> ''.join(reversed(word)) 'olleh' >>> 

Самый лаконичный способ перевернуть строку – использовать срез с отрицательным шагом:

>>> word = 'hello' >>> word[::-1] 'olleh' >>> 

Перевернуть в строке слова с определенной длиной, сохраняя порядок слов

Как перевернуть в строке слова с определенной длиной, сохраняя порядок строки; как изменять список, не теряя порядок значений? Нужно перевернуть слова с длиной >=5, например «Hey fellow warriors» должен возвращать «Hey wollef sroirraw» Возможно ли сделать это с помощью for? Если создавать 2 пустых списка, то при их сложении теряется порядок слов строки. С помощью чего его можно сохранить? Мне неясно, как вообще изменять список, не теряя порядок значений.

#sentence = "Hey fellow warriors" #sentence = "This is a test" sentence = "This sentence is a sentence" def spin_words(sentence): words = sentence.split() p = [o[::-1] for o in words if len(o)>=5] return(p) # данном случае возвращает ['ecnetnes', 'ecnetnes'], если пишем без if len(o)>=5, вернет просто перевернутую строку print(spin_words(sentence)) 

Отслеживать

25.4k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков

Добавить комментарий

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