我知道之前已经问过这个问题,但是我没有看到任何以不拆分列表的方式回答它.
说我有一个清单:
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的新手,并且无法理解这个操作列表的概念.谢谢大家的时间和精力.我希望这个问题足够清楚.
您可以使用切片分配来修改当前策略以执行您想要的操作.您已经正确生成了旋转列表,只需使用修改列表即可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