You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:传参实现自定义次数的列表左右旋转功能

自定义旋转次数的列表旋转实现方案

现有代码的可优化点

你当前实现的旋转函数仅支持单次旋转,且直接操作全局列表变量,要支持自定义旋转次数,可以做以下调整:

  • 为旋转函数新增旋转次数入参k
  • 对旋转次数做取模处理:当旋转次数大于列表长度时,旋转n次(n为列表长度)等价于不旋转,通过k = k % n可以跳过无意义的重复操作
  • 让函数接收待旋转的列表作为参数,不直接依赖全局变量,提升通用性
  • 默认不修改原始传入列表,返回旋转后的新列表,避免副作用

基础修改版本(兼容原有单次旋转逻辑)

table = [1, 10 ,20, 0, 59, 86, 32, 11, 9, 40]

def rotate_left(arr, k=1):
    n = len(arr)
    if n == 0:
        return arr
    k = k % n
    # 拷贝原列表,避免修改输入数据
    res = arr.copy()
    for _ in range(k):
        res.append(res.pop(0))
    return res

def rotate_right(arr, k=1):
    n = len(arr)
    if n == 0:
        return arr
    k = k % n
    res = arr.copy()
    for _ in range(k):
        res.insert(0, res.pop())
    return res

# 用法示例
print(rotate_left(table, 3))  # 左旋转3次
print(rotate_right(table, 2)) # 右旋转2次
print(rotate_left(table))     # 不传k默认左旋转1次,兼容原有逻辑
print(rotate_left(table, 12)) # 旋转次数超过列表长度,自动等价于左旋转2次

更高性能的切片实现

如果列表数据量较大,循环调用pop/insert的性能较差,可以直接用Python列表切片实现,时间复杂度更低:

def rotate_left_fast(arr, k=1):
    n = len(arr)
    if n == 0:
        return arr
    k = k % n
    return arr[k:] + arr[:k]

def rotate_right_fast(arr, k=1):
    n = len(arr)
    if n == 0:
        return arr
    k = k % n
    return arr[-k:] + arr[:-k]

说明

  • 上述实现默认不修改原始输入列表,如果需要直接在原列表上修改,去掉拷贝操作、直接操作入参即可
  • 参数k默认值设为1,原来不传参调用单次旋转的逻辑也能正常运行
  • 增加了空列表判断,避免传入空列表时触发索引错误

内容的提问来源于stack exchange,提问作者Koji E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:33:22