Понимание строкового реверсирования через разрезание

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

Предположим a строковая переменная. Это возвратится a представьте в виде строки назад:

a[::-1]

Кто-либо может объяснить, как это работает?

34
задан martineau 19 July 2019 в 14:26
поделиться

8 ответов

Конечно, [::] является оператором расширенного среза , Это позволяет вам брать подстроки. По сути, он работает, определяя, какие элементы вы хотите, как [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] означает создание строки путем объединения символов, которые вы получаете, проходя назад по строке.

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

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

73
ответ дан 27 November 2019 в 16:09
поделиться

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

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

1
ответ дан 27 November 2019 в 16:09
поделиться

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

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

2
ответ дан 27 November 2019 в 16:09
поделиться

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

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

2
ответ дан 27 November 2019 в 16:09
поделиться

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

sequence[start:end:step]

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

3
ответ дан 27 November 2019 в 16:09
поделиться

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

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

2
ответ дан 27 November 2019 в 16:09
поделиться

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

for char in reversed( myString ):  
  print( char, end = "" )
6
ответ дан 27 November 2019 в 16:09
поделиться

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

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

  • a [:: 2] становится 135
  • a [:: - 1] становится 54321
  • a [:: - 2] становится 531
7
ответ дан 27 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: