2015-06-27 94 views
3

假设我有一个这样的名单:圆形列表中两个元素之间的最小距离?

my_list = [A, B, C, D, E, F, G] 

其实,我用我的名单就像一个循环。这意味着G之后有A,A之前有G

我想知道什么是最短距离,例如BF。因为F -> G -> A -> B短于B -> C -> D -> E -> F

什么是更“pythonic”的方式来计算这样的距离?

我虽然到目前为止还是比较难看(假设我知道指数):

def distance(len_my_list, idx_1, idx_2): 
    right = max(idx_1, idx_2) 
    left = min(idx_1, idx_2) 
    dist_1 = right - left 
    dist_2 = (len_my_list - right) + left 
    return min(dist_1, dist_2) 
+2

我想你的问题属于代码审查,而不是StackOverflow ...你可以在那里得到更好的回应... – Ankit

+0

@Ankit虽然它喜欢示例代码,这可能是一个问题。 – Mast

回答

5

既然你处理列表为圆形,可以使用模运算找到两个距离。

您只需要计算第一个索引减去第二个索引(以列表长度为模),第二个索引减去第一个索引(以列表长度为模)。最短路径是两个值中的最小值。

在Python代码,使您的变量名:

def distance(len_my_list, idx_1, idx_2): 
    i = (idx_1 - idx_2) % len_my_list 
    j = (idx_2 - idx_1) % len_my_list 
    return min(i, j) 

对于你的榜样,i是3和j是4.因此,函数返回3.