Кольцевой циклический сдвиг

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

def shift(lst, steps):
    """Циклический сдвиг списка. 
    lst - список, 
    steps - количество шагов. 
    Если значение 'steps' отрицателено, 
    то сдвиг влево, 
    если положителено, то вправо."""

    # сдвиг влево
    if steps < 0:
        steps = abs(steps)
        # Количество итераций цикла равно
        # количеству шагов.
        for i in range(steps):
            # Извлекается первый элемент
            item = lst.pop(0)
            # и добавляется в конец списка.
            lst.append(item)

    # сдвиг вправо
    else:
        for i in range(steps):
            # Извлекается последний элемент
            item = lst.pop()
            # и вставляется в начало списка.
            lst.insert(0, item)


nums = [4, 5, 6, 7, 8, 9, 0]
print(nums)

# сдвиг влево на 2 позиции
shift(nums, -2)
print(nums)

# Сдвиг вправо на 3 позиции.
# Сдвигаться будет список,
# уже измененный от предыдущего
# вызова shift().
shift(nums, 3)
print(nums)




Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: