在列表中旋转值[Python]

Ken*_*nta 2 python rotation

我知道之前已经问过这个问题,但是我没有看到任何以不拆分列表的方式回答它.

说我有一个清单:

num = [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数:

rotate(lst, x):
Run Code Online (Sandbox Code Playgroud)

因此,如果我调用rotate(num, 3)它将全局编辑列表num.那种方式,当我后来打电话print(num)给它将导致[4,5,6,1,2,3].

我明白我可以编写类似的功能:

rotate(lst, x):
    return [lst[-x:] + lst[:-x]
Run Code Online (Sandbox Code Playgroud)

但是我需要在没有return语句的情况下执行此函数,并且不需要拆分列表.我正在考虑的工作是将列表的最后一个值放入变量中:q = lst[-1]然后从那里创建一个循环,该循环运行x一定次数,继续将值移向列表末尾并替换第0个位置与存储在q中的任何内容.

还有一件事.如果我打电话rotate(lst, -3)而不是旋转到"右",它将必须旋转到"左".

我是python的新手,并且无法理解这个操作列表的概念.谢谢大家的时间和精力.我希望这个问题足够清楚.

tur*_*too 6

您可以使用切片分配来修改当前策略以执行您想要的操作.您已经正确生成了旋转列表,只需使用修改列表即可lst[:] = ...

def rotate(lst, x):
    lst[:] =  lst[-x:] + lst[:-x]
Run Code Online (Sandbox Code Playgroud)

交互式解释器中的示例:

>>> l = [1, 2, 3, 4, 5, 6]
>>> def rotate(lst, x):
...     lst[:] =  lst[-x:] + lst[:-x]
...
>>> rotate(l, 2)
>>> l
[5, 6, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

现在向后旋转:

>>> rotate(l, -2)
>>> l
[1, 2, 3, 4, 5, 6]
>>> rotate(l, -2)
>>> l
[3, 4, 5, 6, 1, 2]
Run Code Online (Sandbox Code Playgroud)

请参阅此答案的另一个问题:https://stackoverflow.com/a/10623383/3022310