如何在Python中对列表前n个元素执行k位左右移位操作?
实现列表前n个元素的旋转功能
需求说明
函数rotate(a, n, k)需要完成以下功能:
- 接收列表
a,选取前n个元素 - 将这前
n个元素向右移动k位(当k为正数时),或向左移动k位(当k为负数时) - 最终返回处理后的完整列表
示例:
rotate([1,2,3,4,5,6,7,8,9], 3, 2) => [4,5,1,2,3,6,7,8,9]
尝试的代码(无法正常运行)
def rotate(a, n, k): movable = a[:n] const = a[:n] for item in movable: const[k] = item
问题分析
这段代码存在几个关键问题:
- 循环中每次都给
const[k]赋值,最终只会保留movable的最后一个元素在该位置,完全没有实现旋转逻辑 - 没有将处理后的前
n个元素与原列表中n之后的元素合并 - 未处理
k的绝对值大于n的情况(比如k=5、n=3时,实际等价于k=2)
正确实现方案
可以利用列表切片简洁实现旋转逻辑,同时通过模运算处理多余的移动步数:
def rotate(a, n, k): # 处理k的绝对值大于n的情况,取模得到实际需要移动的步数 k = k % n # 前n个元素向右移k位:把最后k个元素移到前面,拼接剩余部分 rotated_front = a[n - k : n] + a[: n - k] # 拼接旋转后的前n个元素和原列表剩余部分并返回 return rotated_front + a[n:]
测试示例:
print(rotate([1,2,3,4,5,6,7,8,9], 3, 2)) # 输出 [4,5,1,2,3,6,7,8,9]
对于向左移动的场景(k为负),比如rotate([1,2,3,4,5],3,-1),等价于向右移动2位,上述代码会输出[3,1,2,4,5],同样能正确处理。
内容的提问来源于stack exchange,提问作者pooya
相关产品推荐
相关产品推荐

