为什么我的代码不适用于python

2024-04-25 20:19:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我的密码。我已经写了轮换名单的代码

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']

Tags: 代码in密码forlen朋友rangelist
3条回答

使用来自collectionsdeque

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

您可以在两个方向和任意步骤旋转。你知道吗

除了@yatu的答案之外,您可以在每个循环迭代中只旋转一个元素:

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

因为你覆盖了原来的列表,所以在第二次迭代中,你旋转了一个额外的位置,最后得到了相同的列表。创建临时变量:

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'])

相关问题 更多 >