我正在研究模拟退火的旅行商问题,并且需要编写一个函数来交换列表中的两个元素(列表包含销售人员前往的目的地,我假设他从同一个开始他返回的城市)。我已经包含以下代码:
def new_walk(old_walk):
n1 = rand.randint(1, len(old_walk)-2)
n2 = rand.randint(1, len(old_walk)-2)
walk = old_walk
walk[n1], walk[n2] = walk[n2], walk[n1]
return walk
n1和n2是对应于我要切换的两个随机列表索引的两个整数,len(old_cycle)-2
函数最大值randint
后面的推理是我不想要的用其他任何一个切换最后一个点。
如果我在函数定义中包含print语句,它会给出正确的结果,old_cycle的两个元素被切换。但是,一旦我将它返回到main函数,它就会返回old_cycle列表。任何帮助将不胜感激!
答案 0 :(得分:2)
我尝试过使用我的python shell,版本是3.5.2,但结果显示你的代码运行良好。纯粹基于python编程,我强烈建议您使用walk = old_walk[:]
复制列表。