Понимание обращения строк через нарезку

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

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

a[::-1]

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

Ответы

Ответ 1

Конечно, [::] - это расширенный срез. Он позволяет брать подстроки. В основном, это работает, указывая, какие элементы вы хотите как [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 будет "делать правильные вещи" при заполнении начала и остановки, поэтому он повторяет список в обратном порядке и дает вам [10,9,8,7,6,5,4,3,2,1].

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

Ответ 2

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

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

  • a[::2] становится 135
  • a[::-1] становится 54321
  • a[::-2] становится 531

Ответ 3

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

for char in reversed( myString ):  
  print( char, end = "" )

Ответ 4

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

sequence[start:end:step]

В этом случае шаг -1 означает обратную сторону, и опускание начала и конца означает, что вы хотите всю строку.

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

Я бы сделал это следующим образом:

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

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

Ответ 9

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

- > получить фрагмент "a" от начала до конца с шагом 1 назад.

Ответ 10

Это базовая нотация, рассмотрим функциональность:

а [2: 4: 2]

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

Ответ 11

Рассмотрим приведенный ниже список

l=[12,23,345,456,67,7,945,467]

Другим трюком для изменения списка может быть:

l[len(l):-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]

l[:-len(l)-1:-1] [467, 945, 7, 67, 456, 345, 23, 12]

l[len(l)::-1] [467, 945, 7, 67, 456, 345, 23, 12]

Ответ 12

мы можем использовать append и pop для этого

def rev(s):
    i = list(s)
    o = list()
    while len(i) > 0:
        o.append(t.pop())

    return ''.join(o)

Ответ 13

Без использования обратного или [:: - 1], вот простая версия, основанная на рекурсии, я считал бы наиболее читаемой:

def reverse(s):

  if len(s)==2:
    return s[-1] + s[0]

  if len(s)==1:
    return s[0]

  return s[-1] + reverse(s[1:len(s)-1]) + s[0]

Ответ 14

Использование расширенного синтаксиса слайса

word = input ("Type a word which you want to reverse: ")
def reverse(word):
  word = word[::-1]
  return word
print (reverse(word))

Ответ 15

s = "python programming"
i = -1
n = len(s)
while i >= -n:
    print(s[i],end="")
    i=i-1

Ответ 16

Вы можете использовать функцию reversed(). Например

x = "abcd"
for i in reversed(x):
        print(i, end="")
print("\n")
L = [1,2,3]
for i in reversed(L):
        print(i, end="")

печатает dcba и 321

Ответ 17

первые две границы по умолчанию равны 0, а длина последовательности, как и прежде, и шаг -1 указывают на то, что срез должен идти справа налево вместо обычного слева направо. Следовательно, эффект состоит в том, чтобы изменить последовательность.

name="ravi"
print(name[::-1]) #ivar