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
Если знаете что-либо еще по этой теме, хотите меня поправить или дать идею — пишите в комментариях, я все прочту и приму к сведению. Удачи!
Перевернуть список
Потому что метод reverse переворачивает список, но ничего не возвращает.
>>> a = [1, 2, 3] >>> a [1, 2, 3] >>> a.reverse() >>> a [3, 2, 1]
если вы хотите чтобы функция возвращал перевернутый список не изменяя его — используйте функцию reversed (будьте внимательны, функция вернет итератор!)
>>> a = [1, 2, 3] >>> list(reversed(a)) [3, 2, 1] >>> a [1, 2, 3]
Отслеживать
ответ дан 21 фев 2014 в 8:35
4,666 16 16 серебряных знаков 15 15 бронзовых знаков
Можно копировать список целиком :: и итерировать в обратном порядке — к пр. так:
for i in a[::-1]: print i,"\n"
У print неявная конкатенация строк через запятую — туда можно и \n\n впихать, на версии 3 должно быть также.
В принципе, лучший ответ уже был дан — метод reversed (в противовес reverse()):
for i in reversed(a): print i
Также, если я такой уж многословный, возможно вам нужна разновидность списка (stack — first in last out):
a = [66.25] a.append(333) a.append(333) a.pop() 333 a.pop() 333 a.pop() 66.25
Обратная сортировка списка в Python
Работа с разными типами данных и их инструментами это большая часть рабочего времени программиста. Хороший программист знает, какие существуют методы для работы с тем или иным типом данных, а сегодня на конкретном примере мы рассмотрим как организовать обратную сортировку списка.
На удивление вариантов реализации обратной сортировки оказалось не мало, я же рассмотрю те, что удалось вспомнить.
Сортировка срезом списка
Срезы, а так же слайсинг, нарезка и индексирование — это несколько названий одного и того же. Я постараюсь называть это срезами.
Срезы — позволяет нам получать последовательность элементов/символов (в зависимости от типа данных) по описанному шаблону.
Мы можем использовать срезы для обратной сортировки списка.
spisok_slice = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] spisok_slice[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Принцип работы среза
Срез принимает на вход 3 значения, их необходимо вводить в квадратные скобки
- start — начальный элемент среза
- stop — последний элемент среза
- step — шаг среза
Не забываем, что отсчет элементов начинается с нуля
Отрицательные значения элементов используется для обратного порядка элементов
Если мы передадим в step -1 то получается, что мы вернем список в обратном порядке, от последнего значения к первому. Таким образом мы можем получить сортировку срезом.
Чтобы упростить понимание срезов, можно посмотреть на таблицу ниже, в которой визуально продемонстрированы элементы списка и их положительный и отрицательный индекс.
| Положительный индекс | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| Элемент списка | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| Отрицательный индекс | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
Таблица положительных и отрицательных индексов в списке
Использование среза не изменяет исходный список, а только возвращает копию изменений.
Сортировка методом списка reverse
В Python есть встроенный метод списка reverse(). Он позволяет изменить сортировку в исходном списке.
spisok_reverse = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] spisok_reverse.reverse() print(spisok_reverse)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Сортировка функцией reversed
В Python существует встроенная функция reversed, которая возвращает обратно-отсортированный список.
spisok_reversed = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(reversed(spisok_reversed))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Сортировка функцией sorted
Казалось бы зачем столько, но все таки есть еще один вариант, использовать встроенную функцию sorted с флагом reverse=True
spisok_sorted = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(sorted(spisok_sorted, reverse=True))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Заключение
В данной статье мы рассмотрели несколько вариантов обратной сортировки списка в Python, сортировка с помощью среза, сортировка с помощью метода списка reverse, сортировка с помощью функции reverse и сортировка с помощью функции sorted.
Надеюсь статья была для вас полезна.
Знаете другие способы обратной сортировки списков? Пишите в комментариях
Пройдите список в обратном порядке в Python
В этом посте будет обсуждаться, как пройти список в обратном порядке в Python, не изменяя исходный список.
1. Использование встроенного reversed() функция
Вы можете передать список встроенной функции reversed() , который возвращает обратный итератор и не изменяет список.
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for x in reversed ( a ) :
Если вам нужны индексы, используйте enumerate() функция для получения индекса позиции и соответствующего значения.
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for i , v in reversed ( list ( enumerate ( a ) ) ) :
print ( i , v )
Другой способ итерации с индексами может быть выполнен следующим образом:
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for i in range ( len ( a ) — 1 , — 1 , — 1 ) :
print ( i , a [ i ] )
2. Использование расширенной нарезки
The [::-1] slice создает копию списка в обратном порядке, которую можно использовать в цикле for для печати элементов в обратном порядке.
if __name__ == ‘__main__’ :
a = [ 1 , 2 , 3 , 4 , 5 ]
for x in a [ :: — 1 ] :
Вот и все, что касается обхода списка в обратном порядке в Python.
Оценить этот пост
Средний рейтинг 4.92 /5. Подсчет голосов: 12
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
0 Комментарии
Встроенные отзывы
Просмотреть все комментарии
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
