Короткий ответ
Самый простой и идиоматичный способ развернуть строку — срез с отрицательным шагом: s[::-1]. Альтернативы — ''.join(reversed(s)) или цикл, добавляющий каждый символ в начало. Число разворачивают через строку — int(str(n)[::-1]) — либо арифметически, без преобразования в строку.
Как это работает подробнее
У разворота строки несколько способов, и они различаются краткостью и тем, как именно читаются символы.
- Срез s[::-1]. Синтаксис означает «вся строка с шагом -1», то есть чтение справа налево; это самый короткий вариант.
- reversed и join.
reversed(s)возвращает итератор по символам в обратном порядке, аjoinсобирает их в новую строку. - Цикл. Каждый следующий символ добавляется в начало строки:
rev = ch + rev. - Другие варианты. Можно идти индексами от конца к началу через
range()или использовать стек, гдеpop()снимает последний элемент первым. - Разворот числа. Арифметический способ:
% 10берёт последнюю цифру,rev * 10 + dнакапливает результат, а//= 10отбрасывает обработанную цифру.
Пример кода
Разворот строки и числа
s = 'Geeks'
rev = s[::-1] # срез читает строку справа налево
print(rev) # skeeG
n = 6789
rev_num = 0
while n > 0:
d = n % 10 # берём последнюю цифру
rev_num = rev_num * 10 + d
n //= 10 # отбрасываем последнюю цифру
print(rev_num) # 9876Что использовать на практике
- Строки. Для разворота строки используй срез
s[::-1]— коротко и читаемо. - Числа. Когда нужно именно числовое значение, применяй арифметический цикл без строк.
- Быстрое решение. Если преобразование в строку допустимо, подойдёт
int(str(n)[::-1]).
Подводные камни
- reversed без join.
reversed()возвращает итератор, а не строку, поэтому безjoin()результата не будет. - Знак и нули. Разворот отрицательного числа или числа с нулями в конце требует аккуратности.
- Срез без шага.
s[::-1]работает только с отрицательным шагом, аs[:]вернёт копию без разворота.
Как отвечать на собеседовании
- Начни с самого простого способа для строк — среза
s[::-1]→ упомяниreversed()сjoin()и цикл → перейди к числу: вариант через строку и арифметический → обязательно покажи код цикла с% 10и//= 10.