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

Python如何让列表操作每次基于原始列表执行,恢复列表初始状态?

问题根源

你当前代码中的rotorI是可变的列表对象,循环内执行的rotorI.append(rotorI.pop(0))是直接修改原列表的内存数据,没有重置机制,所以每次循环都会在上一次修改后的结果基础上继续操作,和你要的「每次都从初始列表开始执行」的需求不符。

解决方法

先把转子的初始值单独存为常量,每次接收用户输入前,都用初始值覆盖当前操作的列表即可,修改后的代码如下:

# 初始值存为常量,全程不会被修改
ROTOR_I_INIT = ['E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T','O', 'W','Y','H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J']

while True:
    # 每次循环都从初始值拷贝一份新的操作列表
    rotorI = ROTOR_I_INIT.copy()
    msg = input("Enter a msg: ")
    for i in range(len(msg)):
        rotorI.append(rotorI.pop(0))
    print(rotorI)

如果你不想循环操作列表,也可以直接用列表切片实现相同的移位效果,代码更简洁:

ROTOR_I_INIT = ['E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T','O', 'W','Y','H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J']
while True:
    msg = input("Enter a msg: ")
    offset = len(msg)
    print(ROTOR_I_INIT[offset:] + ROTOR_I_INIT[:offset])

以上两种修改方式都能得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:39:00