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

Python中如何统计列表内重复的子列表?

解决包含双元组的子列表重复统计问题

嘿,我完全懂你现在的困扰——你想要统计的是每个包含两个元组的子列表的重复次数,但之前直接用Counter(Gn)的方式失效了,输出结果反而统计了单个元组的出现次数,这显然不是你要的效果对吧?

问题根源

问题出在列表的可哈希性上:Counter的底层是字典,而字典的键必须是可哈希的不可变类型。你列表中的每个元素是[(1,2,3,4),(3,4,2,1)]这样的子列表,列表是可变类型,无法被哈希,所以Counter没法直接把它当作键来统计。之前的输出其实是把所有子列表里的元组都拆出来单独统计了,这就偏离了你的需求。

解决方案:将子列表转为可哈希的元组

只需要把每个子列表转换成元组(元组是不可变可哈希的),就能让Counter正常工作了。修改后的代码如下:

from collections import Counter
Gn = MHs1(phi)
# 将每个子列表转换为元组,使其成为可哈希对象
hashable_gn = [tuple(sublist) for sublist in Gn]
# 现在Counter可以正确统计子列表的重复次数了
n = dict(Counter(hashable_gn))
print(n)

额外优化:如果元组顺序不影响重复判断

如果你认为[(1,2,3,4),(3,4,2,1)]和[(3,4,2,1),(1,2,3,4)]是同一个重复项,那可以先对子列表里的元组排序,再转成元组,这样就能把顺序不同但内容一致的子列表归为一类:

from collections import Counter
Gn = MHs1(phi)
# 先排序子列表内的元组,再转成元组
hashable_gn = [tuple(sorted(sublist)) for sublist in Gn]
n = dict(Counter(hashable_gn))
print(n)

这样运行后,输出的键就是((1,2,3,4),(3,4,2,1))这类的双元组结构,对应的值就是该子列表的重复次数,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:08:58