我有如下所示的点列表
points=[ [x0,y0,v0], [x1,y1,v1], [x2,y2,v2].......... [xn,yn,vn]]
一些点有重复的 x,y 值。我要做的是提取唯一的最大值x,y点
例如,如果我有点 [1,2,5] [1,1,3] [1,2,7] [1,7,3]
我想获取列表[1,1,3] [1,2,7] [1,7,3]
我如何在 python 中执行此操作?
谢谢
请您参考如下方法:
例如:
import itertools
def getxy(point): return point[:2]
sortedpoints = sorted(points, key=getxy)
results = []
for xy, g in itertools.groupby(sortedpoints, key=getxy):
results.append(max(g, key=operator.itemgetter(2)))
即:按 xy 对点进行排序和分组,对于每个具有固定 xy 的组,选择具有最大 z 的点。如果您对 itertools 感到满意,这似乎很简单(你应该是,它真的是一个非常强大和有用的模块!)。
或者,您可以使用 (x,y) 元组作为键,z 列表作为值来构建一个字典,然后最后一次传递该字典以选择最大值z 用于每个 (x, y),但我认为排序和分组方法更可取(除非您有数百万个点,以便 big-O 性能我猜,出于可扩展性目的,排序会让您担心)。
