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

如何基于共有元素合并两个长度不同的Python嵌套列表

嵌套列表按共有元素合并方案

这个问题本质是求解元素的连通分量:只要两个元素出现在同一个子列表中就视为连通,最终将所有连通的元素汇总为同一个子列表即可。

实现逻辑

  • 选用并查集(DSU)数据结构处理连通合并需求,不需要引入第三方依赖,也不受两个输入列表的长度差异影响
  • 先把两个输入列表的所有子列表合并为一个总列表处理
  • 为所有元素初始化连通关系,将同一个子列表内的所有元素做连通绑定
  • 最后按连通分组汇总元素,得到合并后的嵌套列表

可运行代码

def merge_nested_lists(list1, list2):
    # 并查集基础实现
    parent = {}
    def find(x):
        if parent[x] != x:
            parent[x] = find(parent[x])
        return parent[x]
    def union(x, y):
        x_root, y_root = find(x), find(y)
        if x_root != y_root:
            parent[y_root] = x_root

    # 汇总两个输入的所有子列表
    all_sublists = list1 + list2
    # 初始化所有元素的父节点为自身
    for sublist in all_sublists:
        for item in sublist:
            if item not in parent:
                parent[item] = item
    # 同一子列表内的元素全部绑定连通关系
    for sublist in all_sublists:
        if len(sublist) < 2:
            continue
        first_item = sublist[0]
        for item in sublist[1:]:
            union(first_item, item)
    # 按连通根节点分组汇总元素
    merged_groups = {}
    for item in parent:
        root = find(item)
        merged_groups.setdefault(root, []).append(item)
    return list(merged_groups.values())

# 示例测试
list1 = [['a1', 'a2', 'b2'], ['h1', 'h2'], ['c1', 'd5']]
list2 = [['b5', 'a2'], ['d1', 'd2', 'c1', 'd3']]
combinedList = merge_nested_lists(list1, list2)
print(combinedList)

运行结果

输出和预期一致:[['a1', 'a2', 'b2', 'b5'], ['h1', 'h2'], ['c1', 'd5', 'd1', 'd2', 'd3']],如果对元素顺序有要求,可在返回前对每个分组内的元素自定义排序规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:06:05