You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

逻辑说明

  1. 用zip(a, b)保证按要求的对应层级对比规则,每次取同一层级的a子组和b子列表配对
  2. 把b的子列表转成集合后做交集判断,点存在性判断的时间复杂度从列表的O(n)降到O(1),数据量大的时候性能提升明显
  3. 用found_common标记当前层级是否有匹配到a的线段,只要存在公共点就把对应的a线段加入结果,全程没有匹配到才追加b的子列表
  4. 运行后输出的final_segments和你给出的预期结果完全一致

内容的提问来源于stack exchange,提问作者Crazy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:12:03