我想找到串列中任意 2 個值之間的最小距離。但是,考慮到“順時針”和“逆時針”運動,我需要最小距離。
例如,我有一個串列 [0, 4, 5, 6, 3, 1]。說我想要這對 (4,1) 之間的距離
考慮到索引的差異,“順時針”移動結果顯然是 4。但是,如果一個人“逆時針”移動并認為串列已連接,那么 0 是 1 的鄰居。距離將為 2,這是我想要的結果。
我怎樣才能做到這一點?
我想過加入名單。
[0, 4, 5, 6, 3, 1, 0, 4, 5, 6, 3, 1]
但是,然后有重復項,我不確定如何在這些之間進行選擇。
uj5u.com熱心網友回復:
有幾種方法可以做到這一點。一種方法是注意如何開始反向索引。假裝那個index(1) == -1。距離是現在index(4) - index(1) = 1 1 = 2。在這種情況下-1只是意味著len(a) - 1。因此,對于每一對索引i1and i2,您計算兩個量max(i1, i2) - min(i1, i2), and min(i1, i2) len(a) - max(i1, i2),并取較小的一個。
如果串列中的值不是唯一的,您將需要為每個值查找所有出現的值,并使用類似的方法itertools.product來查找最小距離。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/382234.html
上一篇:增量重復
