Python如何判断坐标点子列表元素是否存在于另一子列表并生成新列表
实现代码
a = [[[(193, 256), (185, 257), (102, 225), (374, 350), (544, 419), (1279, 704), (377, 329)], [(374, 350), (1000, 719), (1050, 719), (1009, 697), (544, 419), (377, 329), (0, 122), (0, 151), (193, 256)]], []] b = [[(0, 122), (0, 151), (193, 256), (374, 350), (544, 419), (1279, 704), (377, 329)], [(249, 0), (1279, 118), (1279, 100), (1226, 92), (439, 0)]] final_segments = [] # 按层级配对a和b的子列表 for a_sub_group, b_sub_list in zip(a, b): b_points = set(b_sub_list) found_common = False # 遍历当前a子组下的所有线段列表 for seg in a_sub_group: # 集合交集判断是否存在公共点,效率远高于列表遍历 if set(seg) & b_points: final_segments.append(seg) found_common = True # 该层级无公共点时追加b的子列表 if not found_common: final_segments.append(b_sub_list) # 输出验证 print("new_list =", final_segments)
逻辑说明
- 用
zip(a, b)保证按要求的对应层级对比规则,每次取同一层级的a子组和b子列表配对 - 把b的子列表转成集合后做交集判断,点存在性判断的时间复杂度从列表的O(n)降到O(1),数据量大的时候性能提升明显
- 用
found_common标记当前层级是否有匹配到a的线段,只要存在公共点就把对应的a线段加入结果,全程没有匹配到才追加b的子列表 - 运行后输出的
final_segments和你给出的预期结果完全一致
内容的提问来源于stack exchange,提问作者Crazy
相关产品推荐
相关产品推荐

