列表中两个值之间的最小距离,考虑到列表在结束和开始之间连接



我想找到列表中任意两个值之间的最小距离。然而,考虑到"顺时针"one_answers"逆时针"运动,我需要最小距离。

例如,我有一个列表[0,4,5,6,3,1]。假设我想要这对之间的距离(4,1(

考虑到指数的差异,"顺时针"移动的结果显然是4。但是,如果"逆时针"移动并认为列表已连接,则0是1的邻居。距离应该是2,这是我想要的结果。

我怎样才能做到这一点?

我想过加入名单。

[0,4,5,6,3,1,0,4,5,6[3,1]

然而,也有重复的,我不确定如何在这些之间做出选择。

有几种方法可以做到这一点。一种方法是注意如何从一开始就获得反向索引。假设index(1) == -1。现在距离为index(4) - index(1) = 1 + 1 = 2。在这种情况下,-1只是指len(a) - 1。因此,对于每对索引i1i2,计算两个量max(i1, i2) - min(i1, i2)min(i1, i2) + len(a) - max(i1, i2),取较小的一个。

如果列表中的值不是唯一的,则需要查找每个值的所有引用,并使用类似itertools.product的方法来查找最小距离。

最新更新