我有一个点列表,如下所示
points=[ [x0,y0,v0], [x1,y1,v1], [x2,y2,v2].......... [xn,yn,vn]]
Run Code Online (Sandbox Code Playgroud)
一些点具有重复的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)))
Run Code Online (Sandbox Code Playgroud)
即:按xy对点进行排序和分组,对于每个具有固定xy的组,选择具有最大z的点.如果你对itertools感到满意,那么看起来很简单(你应该这样,它真的是一个非常强大和有用的模块!).
或者你可以用(x,y)元组作为键和z值列表来构建一个dict,并在那个上执行最后一次传递以选择z每个的最大值(x, y),但我认为排序和组方法更可取(除非你有数百万点所以,排序的大O性能让你担心可扩展性,我想.