为什么我的代码不适用于python列表旋转

cda*_*dac 2 python list

我的代码。我写了旋转列表的代码

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

我的出

['a', 'b', 'c']
['c', 'a', 'b']
['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

预期中

['a', 'b', 'c']
['c', 'a', 'b']
['b', 'c', 'a']
Run Code Online (Sandbox Code Playgroud)

yat*_*atu 5

由于覆盖过多,因此是原始列表,因此在第二次迭代中,您将旋转并增加位置并最终得到相同的列表。创建一个临时变量:

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']
Run Code Online (Sandbox Code Playgroud)

恰如其分-您可能会对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'])
Run Code Online (Sandbox Code Playgroud)