перевернуть строку в Python - PullRequest
       157

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

34 голосов
/ 20 апреля 2009

Я искал способ напечатать строку в обратном направлении, и после быстрого поиска в Google я нашел этот метод:

Предположим, что 'a' является строковой переменной. Это вернет строку 'a' в обратном направлении:

a[::-1]

Может кто-нибудь объяснить, как это работает?

Ответы [ 16 ]

73 голосов
/ 20 апреля 2009

Конечно, [::] - это оператор расширенный срез . Это позволяет вам брать подстроки. По сути, он работает, указывая, какие элементы вы хотите, как [begin: end: step], и работает для всех последовательностей. Две интересные вещи об этом:

  • Вы можете опустить один или несколько элементов, и это делает "правильную вещь"
  • Отрицательные числа для начала, конца и шага имеют значение

Для начала и конца, если вы дадите отрицательное число, это будет означать отсчет с конца последовательности. Например, если у меня есть список:

l = [1,2,3]

Тогда l[-1] равно 3, l[-2] равно 2, а l[-3] равно 1.

Для аргумента step отрицательное число означает выполнение в обратном направлении через последовательность. Итак, для списка ::

l = [1,2,3,4,5,6,7,8,9,10]

Вы можете написать l[::-1], что в основном означает использование шага размером -1 при чтении списка. Python будет «делать правильные вещи» при заполнении start и stop, поэтому он перебирает список в обратном направлении и дает вам [10,9,8,7,6,5,4,3,2,1].

Я привел примеры со списками, но строки - это просто другая последовательность и работают так же. Таким образом, a[::-1] означает создание строки путем объединения символов, которые вы получаете, проходя назад по строке.

7 голосов
/ 20 апреля 2009

Часть «-1» представляет часть «шага» среза - в этом случае она проходит по строке 1 символ за раз, но в обратном направлении (отрицательный шаг означает начало с конца строки). Например, если указать шаг равным 2, вы получите все остальные символы строки, начиная с первого. Если вы укажете шаг -2, вы получите все остальные символы строки, начиная с последнего символа и работая в обратном направлении.

Итак, в двух словах, если a = '12345':

  • a[::2] становится 135
  • a[::-1] становится 54321
  • a[::-2] становится 531
6 голосов
/ 20 апреля 2009

Я думаю, что следующее имеет немного больше смысла для печати строк в обратном порядке, но, возможно, это только я:

for char in reversed( myString ):  
  print( char, end = "" )
3 голосов
/ 20 апреля 2009

Это расширенная нотация :

sequence[start:end:step]

В этом случае шаг -1 означает задом наперед, а пропуск начала и конца означает, что вам нужна вся строка.

2 голосов
/ 04 июня 2011

Я бы сделал это так:

variable = "string"
message = ""
for b in variable:
    message = b+message
print (message)

и это печатает: gnirts

2 голосов
/ 20 апреля 2009

[:: - 1] дает фрагмент строки a. полный синтаксис a[begin:end:step] который дает [начало], [начало + шаг], ... а [конец-1]. Когда шаг отрицательный, вы начинаете с конца и переходите к началу.

Наконец, по умолчанию начинаются с начала последовательности, с конца до конца и с шагом -1.

2 голосов
/ 20 апреля 2009

Используется расширенное срезание - строка представляет собой последовательность в Python и разделяет некоторые методы с другими последовательностями (а именно списками и кортежами). Нарезка состоит из трех частей - начало, остановка и шаг. Все они имеют значения по умолчанию - начальные значения по умолчанию равны 0, конечные значения по умолчанию равны len (sequence), а значение шага по умолчанию равно 1. Указывая [:: - 1], вы говорите «все элементы в последовательности a, начиная с начала , до конца возвращаясь по одному за раз.

Эта функция была введена в Python 2.3.5, и вы можете прочитать больше в документации Что нового .

2 голосов
/ 20 апреля 2009

Это называется Slice Notation в Python, и вы можете прочитать немного больше о том, как это работает здесь:

Объяснить обозначение среза Python

1 голос
/ 03 мая 2017

Это базовый шаг обозначений, рассмотрим функциональность:

A [2: 4: 2]

Что происходит, если индекс разделен между позициями 2 и 4, третья переменная устанавливает размер шага, начиная с первого значения. В этом случае он вернул бы a [2], поскольку a [4] является верхней границей, возвращаются только два значения, и второй шаг не выполняется. Оператор (-) минус просто меняет шаг вывода.

1 голос
/ 20 апреля 2009

строка - это, по сути, последовательность символов, поэтому с ней работает операция среза. То, что вы делаете на самом деле:

-> получить часть «а» от начала до конца с шагом 1 назад.

...