我正在用模拟退火法研究旅行推销员问题,需要编写一个函数,交换列表中的两个元素(列表包含销售人员旅行到的目的地,我假设他从他返回的同一个城市开始)。我包含了以下代码:
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语句,它将给出正确的结果,两个旧的元素将被切换。但是,一旦我将它返回到main函数,它就会返回旧的循环列表。任何帮助都将不胜感激
我试过使用pythonshell,它的版本是3.5.2,但是结果显示您的代码运行得非常好。纯粹基于python编程,我强烈建议您使用
walk = old_walk[:]
复制列表相关问题 更多 >
编程相关推荐