Циклический сдвиг

Выполнить циклический сдвиг в списке целых чисел на указанное число шагов. Сдвиг также должен быть кольцевым, то есть элемент, вышедший за пределы списка, должен появляться с другого его конца.

Для решения этой задачи можно воспользоваться следующими методами списка:

  • append() - добавляет элемент в конец списка,
  • insert() - вставляет элемент по указанному индексу,
  • pop() - извлекает элемент с конца списка или, если был передан индекс, по индексу.

Пусть функция shift() в качестве аргументов принимает список и количество шагов сдвига. Если шаги представлены положительным числом, то сдвиг выполняется вправо, то есть надо извлечь последний элемент и добавить его в начало. 

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

def shift(lst, steps):
    if steps < 0:
        steps = abs(steps)
        for i in range(steps):
            lst.append(lst.pop(0))
    else:
        for i in range(steps):
            lst.insert(0, lst.pop())
 
 
nums = [4, 5, 6, 7, 8, 9, 0]
print(nums)
 
shift(nums, -2)
print(nums)
 
shift(nums, 3)
print(nums)

Пример выполнения:

[4, 5, 6, 7, 8, 9, 0]
[6, 7, 8, 9, 0, 4, 5]
[0, 4, 5, 6, 7, 8, 9]

Создано

Обновлено