如何在两个坐标列表中找出重复坐标以匹配路线衔接关系?
如何找出起点列表与终点列表中的重复坐标?
我有两组路线坐标列表,分别是起点列表和终点列表,需要找出能衔接路线的重复坐标——也就是某条路线的起点等于另一条路线的终点。举个例子:
start_point = [[1,2],[2,4],[3,5]] end_point = [[3,3],[3,4],[3,5]]
期望得到的结果是 [3,5]。想问下Python有没有内置函数或相关库能实现这个需求?是不是必须写递归循环?
完全不用递归循环,用Python内置的集合(set)就能高效解决,核心思路是把列表转成可哈希的元组(因为列表不能直接存入集合),然后求两个集合的交集,最后再转成列表格式。
具体实现代码:
start_point = [[1,2],[2,4],[3,5]] end_point = [[3,3],[3,4],[3,5]] # 将坐标列表转为元组集合(元组可哈希,能存入集合) start_set = set(tuple(p) for p in start_point) end_set = set(tuple(p) for p in end_point) # 求两个集合的交集,再转回列表格式 common_points = [list(p) for p in start_set & end_set] print(common_points) # 输出: [[3, 5]]
如果确定只会有一个重复点,直接取 common_points[0] 就能得到目标坐标。
如果你的坐标是浮点数,要注意精度误差问题,这时候可能需要用math.isclose来做近似相等判断,但整数坐标场景下,上面的方法完全够用。
内容的提问来源于stack exchange,提问作者YURI
相关产品推荐
相关产品推荐

