如何从一组具有最接近给定元组的值的元组中找到元组?

时间:2016-12-11 17:09:27

标签: python numpy tuples

我正在使用python并且有一个dict,其中键是元组,每个元组有3个值。

我正在计算另一个具有3个值的元组,我想在dict的键中找到与这个新计算的元组最接近的值的元组。

我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

def euclid2(x,y):
    return sum((xi-yi)**2 for xi,yi in zip(x,y))

def closestTuple(target,tuples, dist = euclid2):
    return min((dist(t,target),t) for t in tuples)[1]

#test:
target = (3,5,1)
tuples = [(3,1,2), (4,1,5), (6,1,7), (4,4,2), (1,5,7)]
print(closestTuple(target,tuples)) #prints (4,4,2)

这将在欧几里德度量中找到最接近目标元组的元组。您当然可以为dist参数传递另一个函数。

答案 1 :(得分:1)

您可能正在寻找差异的abs(),例如:

>>> from random import randint
>>> d = [tuple(randint(1, 20) for _ in range(3)) for _ in range(5)]
>>> d
[(4, 13, 10), (12, 18, 19), (11, 18, 8), (16, 17, 4), (2, 4, 10)]
>>> k = tuple(randint(1, 20) for _ in range(3))
>>> k
(14, 13, 1)
>>> min(d, key=lambda x: sum(abs(m-n) for m, n in zip(k, x)))
(16, 17, 4)

答案 2 :(得分:0)

您可以尝试以下(我使用列表),并简单地迭代每个元素,并获取元组中每个元素之间的差异,然后最后排序差异的总和并查找最小量< / p>

a = [(1, 2, 3), (3, 4, 5), (5, 6, 7)]
b = (2, 4, 5)
c = []
for x in a:
     c[a.index(x)] = 0
     for i in range(len(x)):
            c[i]+=x[i]-b[i]