Python实现F1赛车模拟器超车函数:交换列表中车手位置
F1赛车模拟器超车位置交换实现方案
问题根源
你遇到的重复元素问题,本质是临时变量赋值顺序错误或者索引操作逻辑混乱——比如先覆盖了其中一个位置的值,再用这个已被覆盖的值去赋值另一个位置,导致两者变成相同元素。
正确实现方式
方法1:Python原生元组解包交换(最简洁)
直接通过索引交换两个元素,无需额外临时变量,Python会自动处理值的暂存:
# 示例车手列表 drivers = ['hamilton', 'verstappen', 'perez', 'sainz'] # 定义超车者和被超车者 overtaker = 'perez' overtaken = 'verstappen' # 获取两者在列表中的索引 idx_overtaker = drivers.index(overtaker) idx_overtaken = drivers.index(overtaken) # 核心:交换两个索引对应的元素 drivers[idx_overtaken], drivers[idx_overtaker] = drivers[idx_overtaker], drivers[idx_overtaken] print(drivers) # 输出:['hamilton', 'perez', 'verstappen', 'sainz']
方法2:临时变量交换(通用逻辑)
如果你坚持用临时变量,必须先保存其中一个位置的原值,再依次覆盖:
drivers = ['bottas', 'latifi'] overtaker = 'latifi' overtaken = 'bottas' idx_overtaker = drivers.index(overtaker) idx_overtaken = drivers.index(overtaken) # 先保存被超车者的当前值 temp = drivers[idx_overtaken] # 把超车者的值放到被超车者的位置 drivers[idx_overtaken] = drivers[idx_overtaker] # 把保存的原值放到超车者原来的位置 drivers[idx_overtaker] = temp print(drivers) # 输出:['latifi', 'bottas']
注意事项
- 确保超车者的索引大于被超车者的索引(符合现实逻辑:后方车手超车前方车手)
- 如果存在重名车手(F1场景几乎不可能),建议改用唯一标识(如车手ID)来获取索引,避免
index()方法返回错误的匹配项
内容的提问来源于stack exchange,提问作者william serangeli
相关产品推荐
相关产品推荐

