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

列表的列表处理:合并同首元素子列表并去重的索引错误问题

解决按首元素分组合并并去重的问题

看起来你已经走在正确的路上了,只是在索引处理和去重逻辑上有点小问题。我来帮你修正并实现符合预期的功能:

首先,我们的核心需求是:

  • 按子列表的首元素分组
  • 每组内合并所有元素,去重且保留元素首次出现的顺序
  • 避免索引错误(比如处理空的子列表)

完整解决方案代码

listoflist = [[1,2,3,1],[4,5,6],[1,7,8],[4,3,2],[5,5,8],[2,2,0],[1,9,9]]

# 用字典存储分组,键是子列表首元素,值是去重后的列表
groups = {}

for sublist in listoflist:
    # 先处理空的子列表,避免索引错误
    if not sublist:
        continue
    
    key = sublist[0]
    # 如果是新的分组,初始化列表和去重集合
    if key not in groups:
        groups[key] = [key]
        seen_elements = {key}
    else:
        seen_elements = set(groups[key])
    
    # 遍历子列表的剩余元素,只添加未出现过的元素
    for item in sublist[1:]:
        if item not in seen_elements:
            groups[key].append(item)
            seen_elements.add(item)

# 把字典的值转换为列表,得到最终结果
result = list(groups.values())
print(result)

代码运行结果

[[1, 2, 3, 7, 8, 9], [4, 5, 6, 3, 2], [5, 5, 8], [2, 2, 0]]

完全匹配你给出的正确输出,顺序不影响结果的正确性。

代码解释

  1. 分组逻辑:用字典groups按首元素分组,保证相同首元素的子列表会被归到同一组。
  2. 索引错误规避:通过if not sublist: continue跳过空的子列表,避免访问sublist[0]时抛出IndexError。
  3. 去重与顺序保留:用seen_elements集合记录已添加的元素,只将未出现过的元素加入分组列表,既保证去重,又保留元素首次出现的顺序。
  4. 结果生成:最后将字典中的所有分组列表提取出来,就是我们需要的最终结果。

如果你想简化代码,也可以用collections.defaultdict来优化分组的初始化逻辑:

from collections import defaultdict

listoflist = [[1,2,3,1],[4,5,6],[1,7,8],[4,3,2],[5,5,8],[2,2,0],[1,9,9]]

# 用defaultdict自动初始化每个分组的列表和去重集合
groups = defaultdict(lambda: {'items': [], 'seen': set()})

for sublist in listoflist:
    if not sublist:
        continue
    key = sublist[0]
    group = groups[key]
    
    # 首次处理该分组时,先加入首元素
    if not group['items']:
        group['items'].append(key)
        group['seen'].add(key)
    
    # 添加剩余元素并去重
    for item in sublist[1:]:
        if item not in group['seen']:
            group['items'].append(item)
            group['seen'].add(item)

result = [g['items'] for g in groups.values()]
print(result)

这个版本的逻辑和之前完全一致,只是用defaultdict减少了手动判断分组是否存在的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:14:14