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

2024-06-16 16:21:36 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个清单:

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

事实上,我用我的列表就像一个循环。这意味着在G之后有{},而在{}之前,有{}。在

我想知道,例如,B和{}之间的最短距离是多少。在

显然,答案是3,因为F -> G -> A -> B比^{短。在

什么是更“Python式”的计算这种距离的方法?

到目前为止,我觉得很难看(假设我知道索引):

^{pr2}$

Tags: 方法答案距离列表mylist短距离pr2
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)

例如,i是3,j是4。因此函数返回3。在

接受的答案依赖于模返回与除数符号相同的答案。这在Python中是正确的,但不是所有的语言。(参见:https://en.wikipedia.org/wiki/Modulo_operation#In_programming_languages

以下代码不太特定于语言:

def distance(len_my_list, idx_1, idx_2):
    dist = abs(idx_1 - idx_2)
    return min(len_my_list - dist, dist)

相关问题 更多 >