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

Python实现移除所有被其他列表包含的子列表的方法

实现方案

需求梳理

给定嵌套列表:

[[8,7,5,6,8],[6,4,6,3],[4,6],[8,7,5,6],[7],[6,4,35]]

需要过滤后输出[[8,7,5,6,8],[6,4,35]],过滤规则为:删除所有作为连续子序列被其他任意子列表包含的子列表。
目前已有可直接调用的判断函数DNAoccursQ(w1, w2),作用是判断w1是否为w2的连续子序列,函数代码如下(注意原始代码缩进不规范,运行前需要调整为Python标准缩进格式):

def DNAoccursQ(w1,w2):
    if len(w1)==len(w2):
        i=0
        while i<len(w1):
            if w1[i] != w2[i]:
                return False
            i+=1
        return True

    elif len(w1)>len(w2):
        return False

    else:
        for i in range(len(w2)-1):
            if w2[i] != w1[0]:
                i+=1
            else:
                p=i
                t=0
                for t in range(len(w1)):
                    if w1[t] == w2[p]:
                        p += 1
                        t+=1
                    elif w1[t]!=w2[p]:
                        return False
                return True
    return False

过滤逻辑

核心逻辑非常直接,两层遍历即可完成判断:

  • 逐个取出嵌套列表中的每个子列表作为待检查项
  • 将待检查项和列表中所有其他子列表逐一比对,调用DNAoccursQ判断待检查项是否是其他子列表的连续子序列
  • 如果待检查项被任意一个其他子列表包含,就标记为待删除;如果遍历完所有其他子列表都没有被包含,就保留该项

完整代码

def filter_nested_sublists(nested_list):
    result = []
    for curr_idx, curr_sub in enumerate(nested_list):
        be_contained = False
        for cmp_idx, cmp_sub in enumerate(nested_list):
            # 跳过和自身的比对
            if curr_idx == cmp_idx:
                continue
            # 调用已有函数判断是否被包含
            if DNAoccursQ(curr_sub, cmp_sub):
                be_contained = True
                break
        if not be_contained:
            result.append(curr_sub)
    return result

测试验证

传入题目给出的测试用例执行:

test_data = [[8,7,5,6,8],[6,4,6,3],[4,6],[8,7,5,6],[7],[6,4,35]]
print(filter_nested_sublists(test_data))

即可得到期望输出[[8,7,5,6,8],[6,4,35]]。

补充说明:如果运行结果和预期不符,优先检查DNAoccursQ函数的匹配逻辑是否存在边界bug,比如短序列在长序列末尾匹配、长序列中存在多个匹配起始点的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:42:27