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

Python实现含公共元素的列表聚合归并方法

Python实现含公共元素的列表聚合归并

需求是将所有存在公共元素的子列表归为同一组,示例如下:

输入:

inputs = [['a','b'], ['a','c'], ['b','d'], ['e','f'], ['g','h'], ['i','k'], ['k','l']]

预期输出:

aggregated_output = [['a','b','c','d'],['e','f'],['g','h'],['i','k','l']]

规则说明:只要子列表间存在公共元素就归为同一组,最终输出的分组顺序、各组内元素顺序没有强制要求。

这个问题本质是求解元素的连通分量,用并查集(DSU)实现效率最高,逻辑清晰,完整代码如下:

from collections import defaultdict

def aggregate_common_lists(inputs):
    # 收集所有出现过的元素
    all_elements = set()
    for sub in inputs:
        all_elements.update(sub)
    
    # 初始化并查集
    parent = {ele: ele for ele in all_elements}

    def find(x):
        if parent[x] != x:
            parent[x] = find(parent[x])
        return parent[x]

    def union(x, y):
        rx, ry = find(x), find(y)
        if rx != ry:
            parent[ry] = rx
    
    # 同一子列表内的元素全部连通,执行合并
    for sub in inputs:
        if not sub:
            continue
        first = sub[0]
        for ele in sub[1:]:
            union(first, ele)
    
    # 按连通分量分组
    res_map = defaultdict(list)
    for ele in all_elements:
        res_map[find(ele)].append(ele)
    
    return list(res_map.values())

测试示例:

inputs = [['a','b'], ['a','c'], ['b','d'], ['e','f'], ['g','h'], ['i','k'], ['k','l']]
print(aggregate_common_lists(inputs))
# 输出结果(顺序不固定,符合要求):[['a','c','b','d'], ['e','f'], ['h','g'], ['k','i','l']]

实现说明:

  • 自动兼容空子列表输入,不会抛出运行错误
  • 时间复杂度接近线性,和所有子列表的元素总个数正相关,处理大规模数据性能优异
  • 输出结果的分组顺序、组内元素顺序不做固定,完全匹配需求规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:12:15