我想找到列表中任意两个值之间的最小距离。然而,考虑到"顺时针"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
。因此,对于每对索引i1
和i2
,计算两个量max(i1, i2) - min(i1, i2)
和min(i1, i2) + len(a) - max(i1, i2)
,取较小的一个。
如果列表中的值不是唯一的,则需要查找每个值的所有引用,并使用类似itertools.product
的方法来查找最小距离。