Три элегантных способа перевернуть строку в Python
Строки в Python — упорядоченная последовательность символов. В Python нет встроенных методов, позволяющих перевернуть строку, «отзеркалить» ее. Но вообще это сделать можно, причем несколькими способами.
Существует три способа перевернуть строку.
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) # вывод перевернутой строки
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
Если знаете что-либо еще по этой теме, хотите меня поправить или дать идею — пишите в комментариях, я все прочту и приму к сведению. Удачи!
Перевернуть каждое слово
146.Дана строка из слов и пробелов. Перевернуть каждое слово, сохранив неизменным иx порядок в строке.Можно програму сдєлать.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Во введенном тексте перевернуть слово с указанным номером, и вывести текст на экран.
Введите текст из нескольких слов. Введите с клавиатуры номер слова, переверните это слово и.
Преобразовать каждое слово в строке
Дана строка, состоящая из русских слов, набранных заглавными буквами и разделенных пробелами (одним.
Вывести на экран каждое n-ое слово
считать с клавиатуры число n и строку string в котором должно быть минимум 6 слов через пробел.
290 / 130 / 58
Регистрация: 24.11.2019
Сообщений: 532
(lambda lst: print(*[(lst[i])[::-1] for i in range(0, len(lst))])) (input().split())
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
1 2 3 4
def rev(x): return ''.join(reversed(x)) # return x[::-1] print(' '.join(list(map(rev, input().split()))))
290 / 130 / 58
Регистрация: 24.11.2019
Сообщений: 532
Semen-Semenich, замудренее получается
Регистрация: 09.10.2022
Сообщений: 21
Это не правильные ответы. Знаки препинания должны остаться на своих местах.
2421 / 1463 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
Сообщение от legger90 
Это не правильные ответы. Знаки препинания должны остаться на своих мест
legger90,
Сообщение от Надиня 
Дана строка из слов и пробелов.
Am I evil? Yes, I am!
![]()
![]()
16119 / 9755 / 2730
Регистрация: 21.10.2017
Сообщений: 21,624
Сообщение от legger90 
Это не правильные ответы.
Добавлено через 3 минуты
Кликните здесь для просмотра всего текста
print(re.sub(r'\w+', lambda x: x[0][::-1], input()))
Надиня, твои идеи будут актуальны всегда
| Меню пользователя @ rim41 |
Регистрация: 02.12.2022
Сообщений: 92
1 2 3 4 5 6 7 8 9 10 11
c = input().split() d = [] for i in c: if i[-1] not in '. @#$%^&*()"-': d.append(i[::-1]) d.append(' ') else: k = (i[0:-1]) d.append(k[::-1]), d.append(i[-1]), d.append(' ') print(''.join(d))
если будет что-то типа абв.где, то код отработает не правильно и придется делать через индекс знака препинания
2421 / 1463 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
1 2 3 4 5 6 7 8 9 10 11 12
s = input() result = '' tmp = '' for i in range(len(s)): if not s[i].isalpha(): result += tmp[::-1] + s[i] tmp = '' elif s[i].isalpha(): tmp += s[i] if tmp: result += tmp[::-1] print(result)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вычленить каждое третье слово из строки
Напишите программу, которая вычленяет из введенной строки каждое третье слово. Знаки препинания.
Вывести каждое третье слово из строки через пробел
нужно вывести каждое третье слово из строки через пробел. s = input().split(‘ ‘) s = for i in.
Посчитайте, сколько раз встречается в тексте каждое слово
Дан текст на русском языке. Посчитайте, сколько раз встречается в тексте каждое слово. Слово —.
Посчитайте, сколько раз встречается в тексте каждое слово
Дан текст на русском языке. Посчитайте, сколько раз встречается в тексте каждое слово. Слово —.

В символьной строке каждое слово перевернуть (например, «кот» на «ток»)
Помогите пожалуйста сделать программу
Как перевернуть строку в 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' >>>
