【问题标题】:Find top right-most coordinate in a list of coordinates在坐标列表中查找最右上角的坐标
【发布时间】:2023-12-17 09:55:01
【问题描述】:

假设我有一个 (x, y) 坐标列表。一个这样的列表是这样的:

coords = [(7, 37), (6, 38), (6, 37), (7, 38), (6, 39), (7, 39), (6, 40), (7, 40), (6, 41), (7, 41), (6, 42), (7, 42), (6, 43), (7, 43), (6, 44), (7, 44), (6, 45), (7, 45), (6, 46), (7, 46), (6, 47), (7, 47), (6, 48), (7, 48), (6, 49), (7, 49), (6, 50), (7, 50), (6, 51), (7, 51), (6, 52), (7, 52), (6, 53), (7, 53), (6, 54), (7, 54), (6, 55), (7, 55), (6, 56), (7, 56), (6, 57), (7, 57)]

现在说我想找到由这些坐标形成的矩形的右上角最角。

最初,我认为我可以做到max(zip(*coords)[0]), min(zip(*coords)[1])。这将给我最大的 x 值和最大的 Y 值。但是,这点不保证在列表中。

右下角可以找到max(coords)。左上角由min(coords) 找到。但是如果我想找到右上角,最有效的方法是什么。

我可以遍历列表,并为每个值计算它与max(zip(*coords)[0]), min(zip(*coords)[1]) 的距离。但是对于较大的点列表,对每个值执行平方根并不是很有效。

有没有一种快速的方法可以在大列表中找到右上角的点?

【问题讨论】:

  • 您对其中一个轴有偏好吗?如果没有,如果有没有左上角坐标(即在列表中)怎么办?
  • 什么情况下没有左上角?如果不止一个?不确定“您是否偏爱某个轴”是什么意思。
  • (0, 0)(1,1) 在常规坐标系中。左上角是哪个?
  • 您要么寻找最小边界矩形的角,要么已经有解决方案。或者离拐角最近的点——你已经有了解决方案。
  • 它们都同样接近 (0,1),任何一个都可以接受。我的数据集中可能总会有一个。

标签: arrays python-2.7 multidimensional-array coordinates distance


【解决方案1】:

我找到了这个解决方案,希望它对你有用:

top_right = max(coords, key=lambda x: (x[0], -x[1]))

编辑:我没有看到这个问题是 5 年前提出的,哈哈。

【讨论】: