You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何统计列表中无序元组组合的出现次数

解决无方向元组组合的统计问题

嘿,这个需求太常见啦——处理无方向的连接关系时,确实得把(a,b)(b,a)当成同一个组合来统计。我给你两个简洁的解决方案,都是Python里常用的思路:

方法一:用collections.Counter(最省心的写法)

这是最简洁的实现方式,核心思路是把每个元组转换成排序后的不可变结构(因为字典/计数器的key必须可哈希),这样不管元组元素顺序如何,都会被归为同一个统计key,再用Counter自动完成计数。

from collections import Counter

my_list = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
# 对每个元组排序后转成tuple,作为Counter的统计key
pair_counts = Counter(tuple(sorted(pair)) for pair in my_list)

# 按你想要的格式输出结果
for sorted_pair, count in pair_counts.items():
    print(f"{sorted_pair[0]},{sorted_pair[1]} = {count}")

运行后会直接输出你期望的结果:

1,12 = 3
20,15 = 2
7,8 = 1

方法二:手动用字典计数(适合理解底层逻辑)

如果不想依赖Counter,用普通字典手动维护计数也很简单,逻辑和上面完全一致:

my_list = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
count_dict = {}

for pair in my_list:
    # 生成排序后的元组作为唯一标识key
    key = tuple(sorted(pair))
    # 更新计数:存在则加1,不存在就初始化为1
    count_dict[key] = count_dict.get(key, 0) + 1

# 格式化输出结果
for sorted_pair, count in count_dict.items():
    print(f"{sorted_pair[0]},{sorted_pair[1]} = {count}")

小补充

这个思路适用于所有元素可排序、可哈希的元组(比如整数、字符串、浮点数这些),如果你的元组里是更复杂的对象,只要能实现排序逻辑,同样可以用这个方法哦~

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

火山引擎 最新活动