【发布时间】:2020-11-16 06:42:10
【问题描述】:
我正在尝试制作一种算法,该算法使用附近的最小距离在距离矩阵中的点到点传播。代码有两个条件:最小距离不小于0,每个点必须访问一次并返回起始位置。
这是我的完整代码:
def totalDistance(aList):
path = []
for j in range(0,len(aList)):
k=j
order = []
for l in range(0,len(aList)):
order.append(k)
initval= min(x for x in aList[k] if x > 0 )
k = aList[k].index(initval)
for s in range(0,len(aList)):
for t in range(0,len(aList[s])):
aList[s][k] = 0
path.append(order)
return path
该代码旨在返回被评估点附近的点的索引。
aList = [[0,3,4,6],[3,0,7,3],[4,7,0,9],[6,3,9,0]],表示距离矩阵。
运行代码时出现以下错误:
initval= min(x for x in aList[k] if x > 0 )
ValueError: min() arg 是一个空序列
我假设当我使用以下函数将距离矩阵中的列设为零时:
for s in range(0,len(aList)):
for t in range(0,len(aList[s])):
aList[s][k] = 0
min() 函数在给定条件下无法找到值。有没有更好的方法来格式化我的代码,这样就不会发生这种情况,或者有更好的方法一起解决这个问题?
【问题讨论】:
-
嘿贾斯汀。欢迎来到本站。好消息/坏消息。 :)。好消息:你有一个好的开始,是的,它可以改进一点。 (任何时候你有一个 4 嵌套循环,很可能你没有以正确的方式思考它。)坏消息:你看到的几个错误。首先是几个问题:你打算从哪里开始?总是第一点还是???你有没有想过如何防止它回到原来的状态?
-
这就是我最终要在这里解决的问题。除了弄清楚如何防止回溯之外,我可以从代码中得到我想要的东西。我尝试嵌套这两个额外的 for 循环以将列更改为零,这样“min()”函数将在进行迭代时将其排除。代码是用一个每个点作为起点。
标签: python python-3.x list propagation