python – 循环列表中两个元素之间的最小距离?

假设我有一个这样的列表:

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

实际上,我使用我的列表就像一个循环.这意味着在G之后有A,在A之前有G.

我想知道B和F之间的最短距离是多少.

显然,答案是3,因为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)

解决方法:

由于您将列表视为循环,因此可以使用模运算来查找两个距离.

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

在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)

例如,我是3,j是4.因此函数返回3.

上一篇:javascript – JS在数组中返回,循环不休


下一篇:L1-016 查验身份证