获取圆形数组元素之间的绝对差异

时间:2018-05-27 20:27:10

标签: python arrays python-3.x

让我说我有一个像l = [1,3,4,5,6,8]的数组

其中n th 元素表示n th 和n + 1 th 对象之间的距离。

我想找到任意两个对象之间的距离,我使用此代码:

def dis(l_list, index1, index2, mylist):
    m = mylist.index(index1)
    n = mylist.index(index2)
    i=0
    j=0
    if n > m:
        while n >= m:
            i = i + mylist[m]
            m = m + 1
    elif n < m:
        while n <= m:
            i = i + mylist[n]
            n = n + 1
    else:
        return(0)
    j = mylist[n] % l_mylist
    print(abs(i - j))

l_mylist = input()
l_mylist = int(l_mylist)

mylist = []

mylist = list(map(int, input().split()))

i,j = input().split()
i, j=int(i), int(j)
dis(l_mylist, i, j, mylist)

但我仍然得到错误的输出。任何人都可以指出我错在哪里吗?

2 个答案:

答案 0 :(得分:1)

如果你想总结一个潜在的循环列表。您可以使用collections.deque()来旋转列表,例如:

from collections import deque

def dist(l, i1, i2):
    d = deque(l)
    d.rotate(-i1)
    return sum(list(d)[:i2-i1]))

In []:
l = [1,2,3,4,5,6,7,8]
dist(l, 3-1, 6-1)     # 3, 4, 5

Out[]:
12

In []:
dist(l, 6-1, 3-1)     # 6, 7, 8, 1, 2

Out[]:
24

答案 1 :(得分:0)

def distance(first_index, second_index, my_list):
    temp_list = my_list + my_list
    if (first_index > second_index):
        first_index += len(my_list)
        requested_sum = sum(my_list[second_index-1:first_index-1])
    else:
        requested_sum = sum(my_list[first_index-1:second_index-1])
    return requested_sum

如果我理解正确,那么这应该可以解决问题。

有更多紧凑而有效的方法可以做到这一点,但在我看来,这是最简单和最容易理解的。