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

如何判断List2与List3的组合是否存在于List1中?求最优方案

问题需求与最优实现方案

给定数据

  • List 1:
[[[160, 600], [125, 600],[120,600]], [[1003, 70], [1000, 60]], [[1003,90], [970,90],[728, 90]],[[300,250],[300,600],[300,292],[300,600]],[300, 100], [300, 250], [300, 250], [300, 250], [[728, 90], [1003, 90]], [1, 1]]
  • List 2:
[125, 1000px, 1003, 300px, 300px, 300, 300, 300, 728]
  • List 3:
[600, 50px, 80, 600px, 100px, 250, 250, 250, 90]

核心需求

逐一验证List2与List3对应位置的元素组成的组合(比如List2第一个元素+List3第一个元素组成[125, 600]),是否存在于List1的任意嵌套子列表中(示例里[125, 600]就存在于List1的第一个子列表内)。

最优实现思路(以Python为例)

第一步:统一数据格式

List2和List3里有些元素带px后缀,得先把这些单位去掉转成整数,不然没法和List1里的纯数字组合匹配:

def clean_value(val):
    if isinstance(val, str):
        return int(val.replace('px', ''))
    return val

cleaned_list2 = [clean_value(item) for item in List2]
cleaned_list3 = [clean_value(item) for item in List3]

第二步:提取List1里所有有效组合

List1嵌套比较深,写个递归逻辑把里面所有长度为2的数字列表都掏出来,存成集合——集合查找元素的速度远快于列表,单次查找几乎不耗时:

def extract_pairs(lst):
    pairs = set()
    for item in lst:
        if isinstance(item, list):
            # 长度为2的纯数字列表就是我们要找的目标组合
            if len(item) == 2 and all(isinstance(x, int) for x in item):
                pairs.add(tuple(item))  # 列表不能直接存进集合,转成元组
            # 遇到更深的嵌套,继续递归提取
            else:
                pairs.update(extract_pairs(item))
    return pairs

list1_pairs = extract_pairs(List1)

第三步:批量验证对应组合

把处理后的List2和List3对应位置的元素凑成组合,直接查集合里有没有就行:

results = []
for x, y in zip(cleaned_list2, cleaned_list3):
    pair = (x, y)
    exists = pair in list1_pairs
    results.append((pair, exists))

# 输出验证结果
for pair, exists in results:
    print(f"组合{pair}是否存在:{'是' if exists else '否'}")

方案优势

  1. 高效查找:用集合存储List1的所有组合,单次查找仅需O(1)时间,整体时间复杂度为O(N+M)(N为List1总元素数,M为List2/List3的长度)。
  2. 兼容性强:递归提取逻辑能处理任意深度的嵌套结构,不用提前固定List1的嵌套层级。
  3. 格式统一:自动处理带px单位的字符串,避免类型不匹配导致的查找失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:20:48