如何将列表顺时针旋转一次,求比现有临时方案更优的实现方法
实现方案
你需要的转换效果可以通过更简洁的写法实现,和你原有实现的时间复杂度一致,代码可读性更高:
1. 生成新列表(不修改原数组)
直接利用Python的切片特性一行完成:
temporary = [0, 2, 4, 4, 5, 6, 6, 7, 7, 7] test = [temporary[0]] + temporary[:-1]
原理是取原数组的首元素作为新列表的首项,再拼接原数组去掉最后一位的切片,完全匹配你给出的转换效果。
2. 原地修改(节省内存)
如果不需要保留原数组,可直接从后往前遍历赋值,空间复杂度可降到O(1):
temporary = [0, 2, 4, 4, 5, 6, 6, 7, 7, 7] for i in range(len(temporary)-1, 0, -1): temporary[i] = temporary[i-1] # 操作完成后temporary本身就是转换后的结果
注意你描述的「顺时针旋转一次」不是通用列表旋转的标准定义,常规列表右旋转一次是把最后一个元素移到最前面,上述两种写法是专门适配你给出的示例效果的实现。
内容的提问来源于stack exchange,提问作者GuwniakSmierdzoncy
相关产品推荐
相关产品推荐

