Циклический сдвиг в python
Нашел решение задачи "циклический сдвиг" и не могу разобраться, что значит одна из строк. Конкретно не понятно какую функцию выполняет записанная в квадратные скобки переменная(4 строка кода). Понимаю что эта строка сдвигает список, но почему именно такая запись и как это можно применять на практике в других кодах-нет. Подскажите пожалуйста
length = int(input())
lst = list(map(int, input().split()))
shift = 1
lst = lst[-shift:] + lst[:-shift]
a=' '.join(str(e) for e in lst)
print(a)
Ответы (1 шт):
Python хорош тем что вы можете легко сами пощупать его конструкции в консоли или в ноутбуке. Как-то так:
Собираем список для тестов:
$ python
@>>> lst = list(range(10))
@>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
shift равен -1, подставляем как есть и смотрим на первое слагаемое. Похоже оно вырезает один элемент с конца списка:
@>>> lst[-1:]
[9]
Второе слагаемое вырезает все элементы списка кроме последнего:
@>>> lst[:-1]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
Если их сложить, то получится что последний элемент переставлен в начало списка. То есть, у нас циклический сдвиг на один элемент вправо. Что и требовалось получить:
@>>> lst[-1:] + lst[:-1]
[9, 0, 1, 2, 3, 4, 5, 6, 7, 8]