我有一个看起来像这样的元组列表:
my_list = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
我想计算数字组合的数量,而不考虑顺序。例如,如果要简单地打印它,我希望输出为:
1,12 = 3
20,15 = 2
7,8 = 1
基本上,我有一个连接列表,但方向并不重要,所以 1 到 12 与 12 到 1 相同。
我已经为此工作了一段时间,但无法想出一个干净的解决方案。我想出的一切都必须检查两个方向,但元组列表是随机的,因此涵盖所有可能性是荒谬的。我可以很容易地用 set 或其他东西来计算唯一的元组,但是同样,我考虑过的“双向”计数的每个解决方案都是草率的。
我觉得这应该不是很难,但我在这方面工作了这么长时间,实在是太费脑筋了。任何帮助将不胜感激!
请您参考如下方法:
您可以使用 collections.Counter,首先使用 sorted 规范化您的元素。
from collections import Counter
lst = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
count = Counter(tuple(sorted(t)) for t in lst)
# output: Counter({(1, 12): 3, (15, 20): 2, (7, 8): 1})
然后你可以像这样打印。
for value, amount in count.items():
print(value, '=', amount)
# Prints:
# (1, 12) = 3
# (15, 20) = 2
# (7, 8) = 1
