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

Python使用itertools.groupby无法移除全部重复项,如何解决?

问题分析

itertools.groupby() 只能对连续重复的元素进行分组去重,你的列表里像 [1, 2]、[1, 3] 这类重复项不是连续出现的,所以没法被过滤掉。

解决方法

方法1:先排序再用groupby

先对列表排序让重复项连续,再用groupby去重:

import itertools

res=[[], [1], [2], [3], [1, 2], [1, 3], [1, 2], [2, 3], [1, 3], [2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

res.sort()
res = [i for i, _ in itertools.groupby(res)]
print(res)
# 输出:[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]

如果需要保持原列表中元素首次出现的顺序,可以用下面的方法。

方法2:利用集合去重(保持首次出现顺序)

因为列表不可直接存入集合,先把每个子列表转成可哈希的元组,去重后再转回列表:

res=[[], [1], [2], [3], [1, 2], [1, 3], [1, 2], [2, 3], [1, 3], [2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

seen = set()
new_res = []
for item in res:
    t = tuple(item)
    if t not in seen:
        seen.add(t)
        new_res.append(item)
print(new_res)
# 输出:[[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]

这个方法能保留原列表中元素第一次出现的顺序,完全符合你的期望结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:15:35