Python实现两数组匹配相同坐标点新增统一ID列的方法咨询
实现代码
# 示例输入 a = [[1, 4500, 5000], [2, 4600, 5100], [3, 4700, 5200]] b = [[3, 4500, 5000], [1, 4600, 5100], [2, 4700, 5200]] # 初始化坐标映射字典和统一ID计数器 coord_to_unified_id = {} current_unified_id = 1 # 遍历数组a,注册所有坐标的统一ID for row in a: x, y = row[1], row[2] coord_key = (x, y) if coord_key not in coord_to_unified_id: coord_to_unified_id[coord_key] = current_unified_id current_unified_id += 1 # 遍历数组b,补充注册a中不存在的坐标的统一ID for row in b: x, y = row[1], row[2] coord_key = (x, y) if coord_key not in coord_to_unified_id: coord_to_unified_id[coord_key] = current_unified_id current_unified_id += 1 # 生成带统一ID的新数组 a_new = [] for row in a: original_id, x, y = row a_new.append([original_id, coord_to_unified_id[(x, y)], x, y]) b_new = [] for row in b: original_id, x, y = row b_new.append([original_id, coord_to_unified_id[(x, y)], x, y]) # 打印结果验证 print("a_new =", a_new) print("b_new =", b_new)
逻辑说明
- 全程采用循环逻辑实现,未使用排序方案,符合需求
- 用字典存储
(X坐标, Y坐标)与统一ID的映射关系,查询效率高,适合任意规模的数组处理:- 元组作为字典键的原因是:列表为可变类型,无法作为字典的键,元组为不可变类型,可直接作为键使用
- 先遍历两个数组收集所有坐标,为每个新出现的坐标分配递增的统一ID,确保相同坐标对应同一个ID
- 兼容两个数组存在独有坐标的场景,即使某组坐标只出现在a或只出现在b中,也能正常分配唯一的统一ID
运行上述代码输出结果和期望输出完全一致:
a_new = [[1, 1, 4500, 5000], [2, 2, 4600, 5100], [3, 3, 4700, 5200]] b_new = [[3, 1, 4500, 5000], [1, 2, 4600, 5100], [2, 3, 4700, 5200]]
内容的提问来源于stack exchange,提问作者Sbobby
相关产品推荐
相关产品推荐

