Python合并含重复元素嵌套列表时出现索引越界错误如何解决
问题报错原因
- 根本原因是你在遍历列表
Tb的过程中,动态删除了Tb的元素(调用pop方法),但for i in range(len(Tb))的遍历范围是循环启动前就计算好的固定值,当Tb长度变小后,后续的索引i、j就会超出当前Tb的实际长度,触发索引越界错误。 - 原有逻辑还存在其他问题:合并后的列表会重复添加到
Tc、没有对Tc自身做去重合并处理,无法得到期望的输出结果。
正确实现方案
采用不修改原列表的逐次合并逻辑,避免索引越界,代码如下:
Tb = [[1],[1,3],[1,2],[5,7]] Tc = [] for sub_list in Tb: sub_set = set(sub_list) merged = False # 遍历已合并的结果,找有交集的项合并 for i in range(len(Tc)): existing_set = set(Tc[i]) # 判断两个子列表是否有公共元素 if sub_set & existing_set: Tc[i] = list(sub_set | existing_set) merged = True break # 没有可合并的项就直接加入结果 if not merged: Tc.append(list(sub_set)) # 可选:对子列表排序,匹配期望的输出格式 for i in range(len(Tc)): Tc[i].sort() print(Tc) # 输出 [[1, 2, 3], [5, 7]]
逻辑说明
- 全程不修改原列表
Tb,从根源避免索引越界问题 - 维护结果列表
Tc,每次拿Tb的子项和Tc中已有项判断是否有交集,有交集就合并,没有就新增,逻辑清晰可控 - 若不需要子列表按升序排列,可删除最后的排序代码段
内容的提问来源于stack exchange,提问作者Hyojae Kim
相关产品推荐
相关产品推荐

