统计列表中的元组数量,不考虑元组内每个元素的顺序

5

我有一个关于在Python列表中计数出现次数的问题。

这是列表:

aList = [(11, 0), (9, 7), (23, 9), (25, 3), (9, 9), (21, 2), (10, 9), (14, 14), (8, 13), (14, 9), (11, 4), (1, 14), (3, 9), (3, 1), (11, 9), (9, 1), (7, 0), (9, 3), (9, 3), (16, 11), (9, 7), (9, 13), (11, 9), (26, 18), (18, 9), (11, 14), (9, 9), (24, 26), (12, 21), (1, 14), (3, 14), (15, 14), (26, 9), (11, 3), (4, 14), (9, 14), (26, 4), (7, 26), (9, 3), (13, 3), (9, 24), (14, 9), (3, 26), (7, 25), (5, 9), (9, 5), (14, 4), (9, 0), (4, 26), (4, 26), (9, 9), (18, 18), (9, 7), (7, 6), (9, 9), (14, 13), (11, 9), (3, 9), (9, 15), (25, 9), (10, 24), (0, 4), (10, 3), (8, 12), (9, 4), (20, 9), (9, 9), (6, 9), (9, 8), (9, 9), (24, 16), (9, 11), (14, 9), (7, 12), (1, 9), (9, 13), (5, 13), (9, 9), (25, 9), (4, 9), (1, 3), (10, 9), (12, 9), (9, 9), (11, 11), (14, 3), (9, 25), (16, 1), (25, 16), (25, 16), (5, 9), (9, 3), (5, 1), (10, 24), (10, 25), (24, 1), (9, 1), (24, 9), (9, 7), (25, 3)]

如您所见,这是一个元组列表。我需要计算每个元组出现的次数,无论元组内的每个元素的顺序如何。

我尝试使用Collections的计数器,就像这样:

cnt = Counter()
for l in aList:
    cnt[l] += 1

print cnt

类似 (3, 9) 和 (9, 3) 的元组应该被视为相同,但是我的代码现在做不到这一点。有没有一种方法可以使用counter实现这种计数?或者我应该使用另一种方法?

谢谢!


每个“tuple”是否总是有两个元素? - TigerhawkT3
1
你不应该使用内置名称作为自己变量的名称。list是内置的列表类型。 - Cyphase
没错,谢谢! - Lucien S.
2
如果每个元组中的元素数量不总是两个,而且您还想忽略元素重复出现的次数以及忽略顺序,那么将Cyphase的答案中的“tuple(sorted(tup))”替换为“frozenset(tup)”即可完成任务。 - Steve Jessop
1
如果元组不总是二元组,甚至有不同大小的元组,tuple(sorted(tup)) 仍然可以工作。 - Cyphase
1个回答

9
这应该可以解决问题:
counter = Counter(tuple(sorted(tup)) for tup in your_list)
print counter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接