【问题标题】:How can i get the closest distance between a tuple and a list of tuples?如何获得元组和元组列表之间的最近距离?
【发布时间】:2019-09-24 14:09:12
【问题描述】:

我想在一个列表中找到最接近给定元组的元组。

我有一个坐标列表和一个点​​,我需要在列表中找到最接近我的点的项目。

类似这样的:


cords =  [(455, 12), (188, 90), (74, 366), (10,10)]
point = (18, 448)

for c in cords:
    dst = distance.euclidean(cords[c], point)

Output = closest distance

我尝试使用scipy.spatial.distance.euclidean,但这给出了错误:

TypeError:列表索引必须是整数或切片,而不是元组

【问题讨论】:

  • 在第一次迭代中c 是元组(455, 12)-。你认为cords[(455, 12)] 是什么?

标签: python list tuples euclidean-distance


【解决方案1】:

Python min 允许指定一个返回值的单参数函数(“key”),它将返回最小化它的元素。

min(cords, key=lambda c : distance.euclidean(c, point))

【讨论】:

  • 这将给出具有最小距离的点,要获得最小距离,您必须再次计算它。
  • OP: "我想在一个列表中找到最接近给定元组的 元组"
  • 那我在问题中被Output = closest distance骗了。
【解决方案2】:

c是坐标列表中的元组,不是索引,所以用它代替cords[c],你也可以用min和一个生成器表达式来得到你想要的:

from scipy.spatial.distance import euclidean

cords =  [(455, 12), (188, 90), (74, 366), (10, 10)]
point = (18, 448)

closest_dst = min(euclidean(c, point) for c in cords)
print(closest_dst)

输出:

99.29753269845128

【讨论】:

  • 如果您使用 key 参数,则不需要生成器;)
【解决方案3】:

您将对象 c 作为索引传递给它。如果你想使用索引,你可以使用 enumerate 来做到这一点,或者只是用 Python 的方式来做:

cords =  [(455, 12), (188, 90), (74, 366), (10,10)]
point = (18, 448)

for c in cords:
    dst = distance.euclidean(c, point)

您应该保存距离并找到最小值。

【讨论】:

    【解决方案4】:

    试试for c in range(len(cords))。就像你一样,你将列表元素放入c,而不是索引。

    【讨论】:

    • len(cords) 返回一个整数,它是不可迭代的(所以这段代码会引发错误...)
    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2011-07-28
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多