[英]How can I find a tuple from a group of tuples with the values closest to a given tuple?
我正在使用python,并且有一个dict,其中键是每个具有3个值的元组。
我正在计算另一个具有3个值的元组,我想在字典键中找到与该新计算的元组最接近的值的元组。
我应该怎么做呢?
您可以执行以下操作:
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
参数传递另一个函数。
您可能正在寻找差异的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)
您可以尝试以下操作(我使用了一个列表),然后简单地遍历每个元素,并取而代之以元组中每个元素之间的差,然后最后对差的总和进行排序,并寻找最小的数量
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.