在Python中,什么';求二维最接近整数的最佳方法是什么?

在Python中,什么';求二维最接近整数的最佳方法是什么?,python,Python,我有一个二维元组列表,未排序,大小为nsize。我想找出哪个元组的维数与X和Y最接近。最好的方法是什么 target = (75, 75) values = [ (38, 61), (96, 36), (36, 40), (99, 83), (74, 76), ] 使用目标和值,该方法应生成答案(74,76) 编辑 对于在这里登陆的任何人来说,这条路都会让我找到一个确切的方法: def distance(item, target): return

我有一个二维元组列表,未排序,大小为
n
size。我想找出哪个元组的维数与X和Y最接近。最好的方法是什么

target = (75, 75)
values = [
    (38, 61),
    (96, 36),
    (36, 40),
    (99, 83),
    (74, 76),
]
使用
目标
,该方法应生成答案
(74,76)

编辑

对于在这里登陆的任何人来说,这条路都会让我找到一个确切的方法:

def distance(item, target):
    return ((item[0] - target[0]) ** 2 + (item[1] - target[1]) ** 2) ** 0.5

best = min(values, key=lambda x: distance(x, target))
这是一个问题

  • 首先取测试值的
    x
    减去最佳
    x
    值的平方
  • 然后取测试值的
    y
    的平方减去最佳
    y
  • 最后,取步骤1加步骤2的平方根,它给出了距离
  • 将此应用于列表中的所有项目,最低的数字(使用
    min
    功能)将为您提供最佳匹配

  • 这是一种方法。

    只是从另一个角度看待这个问题。由于这是一个笛卡尔平面问题,请将其转换为复杂平面并求解

    def distance(tup1,tup2):
        """
            This question is unanswerable unless you can specify this
    
            examples for 2d (you can write more general N-dimensional code if you need):
            cartesian: math.sqrt((tup2[0]-tup1[0])**2 + (tup2[1]-tup1[1])**2)
            manhattan: (tup2[0]-tup1[0]) + (tup2[1]-tup1[1])
        """
        return # YOUR CODE HERE
    
    min(values, key=lambda x:distance(target,x))
    
    >>> min((abs(complex(*e)-complex(*target)),e) for e in values)[-1]
    (74, 76)
    

    ,这个问题是无法回答的,除非你定义了“维度”的含义,以及“维度接近”的含义。哦,这里使用lambda,这就是我所缺少的+1.谢谢,您假设列表元素总是二维的,这是正确的。我将更新我的问题以获得最终代码,但这是答案。再次感谢。@sberry:哦,对不起,我应该编辑你的答案而不是回复。作为记录,还可以定义一个通用函数,
    def distance to target(x):返回距离(target,x)
    (或者使用
    functools.partial
    ,这是一种实现较差的函数)。如果
    target
    是一个全局变量,可以在keyfunc中将其声明为
    global target
    。在2d情况下,还有
    math.hypot
    。如果只是求最小值,则不需要求平方根(使d^2最小化的值也将使d最小化)。不过,这些只是一些调整,Python的开销非常大,每当我猜什么是没有计时的最快速度时,我就猜错了。。
    >>> min((abs(complex(*e)-complex(*target)),e) for e in values)[-1]
    (74, 76)