对数

时间:2015-05-16 14:49:05

标签: python algorithm python-3.x integer

我正在尝试编写一个带

的代码
  • 米。 a ,整数列表

  • ñ。 b ,一个整数 并返回 a 中m,n的对(m,n)的数量,使得| m-n |< = b。

到目前为止,我已经有了这个

def nearest_pairs(a, b):
    m= []
    n= int
    num_pairs = 0
    return num_pairs

def main():
    # The nearest pairs are (1,2), (2,1), (2,5) and (5,2)

    x = nearest_pairs( [1,2,5] , 3 )
    print( "nearest_pairs([1, 2, 5], 3) = " , nearest_pairs([1, 2, 5], 3) )

    # The nearest pairs are (1,2) and (2,1)
    y = nearest_pairs( [1, 2, 5] , 2 )
    print( "nearest_pairs([1, 2, 5], 2) = " , nearest_pairs([1, 2, 5], 2) )

if __name__ == '__main__':
    main()

所需的输出应该看起来像

>>> nearest_pairs([1,2,5],3) = 4

其中4是根据限制的密切对的数量。但是,我收到一个错误。谁能引导我走向正确的方向?

2 个答案:

答案 0 :(得分:0)

from itertools import permutations
def nearest_pairs(a, b):
    for m, n in permutations(a, 2):
        if abs(m - n) <= b:
            yield (m, n)
>>> list(nearest_pairs([1, 2, 5], 3))
[(1, 2), (2, 1), (2, 5), (5, 2)]
>>> list(nearest_pairs([1, 2, 5], 2))
[(1, 2), (2, 1)]

如果您只想要点数:

def nearest_pairs_count(a, b):
    c, l = 0, len(a)
    for i in range(l):
        for j in range(i + 1, l):
            if abs(a[i] - a[j]) <= b:
                c += 2
    return c

答案 1 :(得分:0)

你的意义不大。不知道你在len(a, b)尝试了什么,但它甚至不允许,因为len只接受一个参数。当你找到第一个计数对时返回一些东西?这是一个修复:

def close_pairs(l, d):
    ctr = 0
    for a,b in permutations(l, 2):
        if (a - b) <= d and (b - a) <= d:
            ctr += 1
    return ctr

以下是我的表现:

def close_pairs(l, d):
    return sum(abs(a-b) <= d for a, b in permutations(l, 2))