获取列表中元组的计数,而不考虑元素的顺序

2024-05-23 23:19:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表,看起来像这样:

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

我想要一个数字组合的计数,不管顺序如何。例如,如果要简单地打印,我希望输出为:

^{pr2}$

基本上,我有一个连接列表,但是方向并不重要,所以1到12等于12到1。在

我在这方面已经做了一段时间了,还没有一个干净的解决方案。我想出来的所有东西都要检查两个方向,但是元组的列表是随机的,所以覆盖所有可能性都是荒谬的。我可以很容易地用set或其他东西来计算唯一元组,但是,我所考虑的“双向”计数的每个解决方案都是草率的。在

我觉得这应该不是很难,但我已经在脑力煎熬了这么长时间。任何帮助将不胜感激!在


Tags: 列表顺序my数字双向解决方案可能性方向
3条回答

您可以按大小交换所有位置,然后使用collections.counter

from collections import Counter
l = [(1,12),(12,1),(12,1),(20,15),(7,8),(15,20)]
new_l = Counter([[(b, a), (a, b)][a < b] for a, b in l])
for a, b in new_l.items():
  print('{},{}:{}'.format(*(list(a)+[b])))

输出:

^{pr2}$

可以使用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})

你可以这样打印。在

^{pr2}$

首先你可以对你的清单进行排序

lst2 = [tuple(sorted(i)) for i in lst]

然后可以使用set()来查找此列表中的唯一值并计算其出现次数。在

^{pr2}$

{(1, 12): 3, (7, 8): 1, (15, 20): 2}

相关问题 更多 >