使用Python查找2个列表之间的最小移动?

时间:2019-01-08 03:03:15

标签: python-3.x list zip

鉴于a=[123,45]b=[232,64],我们需要确定从ab的移动

a[0]b[0]导致:

increment by 1(1 to 2), 
increment by 1(2 to 3), 
decrement by 1(3 to 2) 

所以3总共移动了(1+1+1)

a[1]b[1]导致

increment by 2(4 to 6), 
decrement by 1(5 to 4)

3总共移动(2 + 1)

最小移动次数= 3 + 3 = 6

因此,对于给定的2个列表,我们需要找到到达下一个列表的总移动量?

我的程序有误在下面

def sub(a,b):
 s = 0
 for x, y in zip(a,b):
   s += x-y
 return s
sub([123,45],[232,64])

-128

1 个答案:

答案 0 :(得分:3)

这应该有效:

def sub(a,b):
    s = 0
    for x, y in zip(a,b):
        s += sum(abs(int(n) - int(m)) for n, m in zip(str(x), str(y)))
    return s

print(sub([123,45],[232,64]))

输出:

6