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

社区检测中如何移除嵌套列表中的重复项?

移除嵌套列表中的重复子列表方案

原代码问题分析

  1. 变量名大小写不一致:原列表是lst_of_lts,但代码中使用Lst_of_lts(Python大小写敏感),这会导致操作的是未定义的变量,自然无法修改原列表。
  2. itertools.groupby的局限性:groupby只能对连续的相同元素分组,若重复子列表元素顺序不同(比如[1,2]和[2,1]),排序后仍不会连续,无法被分组去重。
  3. 冗余步骤:先sort再groupby完全多余,后续的集合推导式已经可以完成去重,多此一举反而可能引入问题。

针对不同需求的解决方案

需求1:移除**完全相同(包括元素顺序)**的子列表

如果子列表元素顺序完全一致才算重复,用tuple转成可哈希类型后,通过集合或有序字典去重:

# 简单去重(不保留原顺序)
unique_lists = list(map(list, {tuple(lst) for lst in lst_of_lts}))

# 保留原列表顺序(Python 3.7+)
unique_lists = list(map(list, dict.fromkeys(tuple(lst) for lst in lst_of_lts)))

需求2:移除**元素集合相同(忽略顺序)**的子列表

如果只要元素相同,不管顺序就算重复(比如社区检测中,同一组节点不管顺序都算同一个社区),先对子列表排序再转tuple去重:

# 简单去重(不保留原顺序)
unique_lists = list(map(list, {tuple(sorted(lst)) for lst in lst_of_lts}))

# 保留原列表顺序
seen = set()
unique_lists = []
for lst in lst_of_lts:
    sorted_tuple = tuple(sorted(lst))
    if sorted_tuple not in seen:
        seen.add(sorted_tuple)
        unique_lists.append(lst)

验证方法

可以打印去重前后的长度对比,确认是否生效:

print(f"原列表长度:{len(lst_of_lts)}")
print(f"去重后列表长度:{len(unique_lists)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:33:35