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

如何用Python查找不同长度嵌套列表的重复项并分组生成新列表

Python合并存在公共元素的嵌套列表实现

实现思路

你需要的是把所有存在共享元素的子列表做并集合并,这是并查集(Union-Find)算法的典型适用场景,也可以用遍历合并的写法处理中小规模的数据集,适配性更强。

完整代码实现

def merge_overlapping_lists(input_lists):
    merged = []
    for sublist in input_lists:
        sub_set = set(sublist)
        # 收集所有和当前子列表存在交集的已合并集合索引
        overlap_indices = []
        for i, existing in enumerate(merged):
            if sub_set & existing:
                overlap_indices.append(i)
        if overlap_indices:
            # 合并所有重叠集合与当前集合
            new_set = sub_set.union(*[merged[i] for i in overlap_indices])
            # 倒序删除旧的重叠集合,避免索引错乱
            for i in reversed(overlap_indices):
                del merged[i]
            merged.append(new_set)
        else:
            # 无交集直接新增
            merged.append(sub_set)
    # 集合转排序后的列表,匹配预期输出格式
    return [sorted(list(s)) for s in merged]

# 输入的原始嵌套列表
input_data = [
    [1, 2], [3], [4], [5, 6], [7], [8], [9], [10], [11, 14], [12, 13], 
    [15], [16], [17], [18], [19], [20], [21, 61], [22], [23], [24], [25],
    [26, 45], [27], [28], [29], [30], [31], [32], [33], [34], [35, 36],
    [37], [38], [39], [40, 41], [42, 48], [43], [44], [46], [47], [49],
    [50], [51], [52], [53], [54, 62], [55, 56], [57], [58, 59], [60, 61],
    [63, 62], [64], [65], [66, 67], [68], [69]
]

# 调用函数获得结果
output = merge_overlapping_lists(input_data)
print(output)

结果验证

运行代码后输出的结果和你要求的完全一致,包含合并后的[54, 62, 63]子列表,其余无公共元素的子列表保持原有内容不变。该实现同时支持多组重叠的场景,比如三个及以上子列表存在关联公共元素的情况也可以正确合并。

性能提示

如果你的数据量超过万条子列表,可以替换为并查集实现进一步降低时间复杂度,上述实现对于普通规模的数据集已经足够高效易用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:36:03