Python如何实现列表左右旋转 修复负偏移量旋转结果错误问题
列表旋转代码修复方案
问题根源
原代码未对偏移量r做基于列表长度的模运算归一化处理。当r的绝对值大于列表长度时,Python原生切片会直接返回完整列表或空列表,最终拼接结果和原列表完全一致,不符合预期。
你给出的测试场景中,列表长度为9,r=-34时,l[-34:]返回完整原列表,l[:-34]返回空列表,二者拼接后就是原列表,和你遇到的错误输出一致。
修复方法
在旋转逻辑前对r做模运算,将偏移量映射到[0, 列表长度-1]的有效范围内,Python的取模运算天然支持负数计算,无需额外处理正负逻辑,同时补充空列表的边界场景判断。
修复后完整代码如下:
def rotate(l, r): n = len(l) # 处理空列表边界,避免除以0错误 if n == 0: return l # 偏移量归一化,适配任意正负、任意大小的偏移值 r = r % n return l[r:] + l[:r] l = eval(input()) r = int(input()) print(rotate(l, r))
效果验证
你的测试用例中,-34 % 9 = 2,最终等效于执行l[2:] + l[:2],输出结果正好是预期的['C', 'D', 1, 2, 3, 4, 5, 'A', 'B']。
内容的提问来源于stack exchange,提问作者RAKSHIT HARSH
相关产品推荐
相关产品推荐

