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

Minimum distance between 2 values in a list, considering list is connected between end and start

我想找出列表中任意两个值之间的最小距离。但是,考虑到 'clockwise' 和 'anticlockwise' 移动,我需要最小距离。

例如,我有列表 [0, 4, 5, 6, 3, 1]。假设我想要 (4,1)

对之间的距离

移动'clockwise'考虑到索引的差异,结果显然是4。但是,如果移动 'anti-clockwise' 并认为列表连接,那么 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 的方法来查找最小距离。