我正在尝试编写一个带
的代码米。 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是根据限制的密切对的数量。但是,我收到一个错误。谁能引导我走向正确的方向?
答案 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))