在Python中,获得最接近二维整数的最佳方法是什么?

dam*_*mon 0 python

我有一个二维元组列表,未分类和n大小.我想找到哪个元组与X和Y的维度最接近.最好的方法是什么?

target = (75, 75)
values = [
    (38, 61),
    (96, 36),
    (36, 40),
    (99, 83),
    (74, 76),
]
Run Code Online (Sandbox Code Playgroud)

使用targetvalues,方法应该产生答案(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))
Run Code Online (Sandbox Code Playgroud)

这是笛卡尔距离问题.

  1. 首先取测试值的平方x减去最佳x值.
  2. 然后取测试值的平方y减去最佳y值.
  3. 最后取步骤1的平方根加上步骤2,它给你距离.
  4. 将其应用于列表中的所有项目,最低编号(使用该min功能)将为您提供最佳选择.

nin*_*cko 6

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))
Run Code Online (Sandbox Code Playgroud)

  • 在第二种情况下,还有`math.hypot`.如果您只是找到最小值,则不需要取平方根(最小化d ^ 2的值也会使d最小化).这些只是调整,而且Python的开销足够大,每当我猜想没有时间的时候最快的话我猜错了.. (2认同)