Почему мой код не работает для поворота списка Python - PullRequest
2 голосов
/ 01 октября 2019

Мой код. Я написал код для поворота списка

s = 'abc'
lst = list(s)
for x in range(0,len(lst)):
    lst =  lst[-x:] + lst[:-x]
    print (lst)

Мой выход

['a', 'b', 'c']
['c', 'a', 'b']
['a', 'b', 'c']

Ожидаемый выход

['a', 'b', 'c']
['c', 'a', 'b']
['b', 'c', 'a']

Ответы [ 3 ]

5 голосов
/ 01 октября 2019

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

s = 'abc'
lst = list(s)
for x in range(0,len(lst)):
    lst_ =  lst[-x:] + lst[:-x]
    print (lst_)

['a', 'b', 'c']
['c', 'a', 'b']
['b', 'c', 'a']

Так же, как примечание - вы можете найти collections.deque интересным для такой задачи:

from collections import deque
d = deque(s)
for _ in range(len(s)):
    print(d)
    d.rotate()

deque(['a', 'b', 'c'])
deque(['c', 'a', 'b'])
deque(['b', 'c', 'a'])
1 голос
/ 01 октября 2019

использовать deque из коллекций

from collections import deque
foo = ['a', 'b', 'c']
bar = deque(foo)
for _ in range(len(bar)):
    print(bar) # or ptint(list(bar))
    bar.rotate()

Вы можете вращать в обоих направлениях и с произвольными шагами.

1 голос
/ 01 октября 2019

В качестве альтернативы ответу @yatu вы можете вращать свой список только на один элемент в каждой итерации цикла:

s = 'abc'
lst = list(s)
print(lst)
for x in range(0,len(lst)-1):
    lst =  lst[-1:] + lst[:-1]
    print (lst)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...