如何比较相同元组列表中的出现

时间:2019-01-02 13:26:48

标签: python list dictionary tuples counter

我有一个像这样的元组列表: L = [(23,56,48),(48,93,81),(48,56,23),(54,34,21),(48,98,71),(98,71,48),(56,23,48)] 一些元组具有完全相同的数字,但顺序不同。我想计算元组的出现并覆盖其中具有相同值的元组。我在这里阅读了几个答案,并设法使用Counter方法做一些事情。但是我尝试过的似乎对我没有用。我是python新手,所以也许我不了解Counter方法的确切用法。

L1 = Counter()
for item in L:
    for element in item:
        if element in item:
            L1[tuple(item)] = L1[tuple(item)] + 1
print(L1)

我得到的结果是:

Counter({(23, 56, 48): 3, (48, 93, 81): 3, (48, 56, 23): 3, (54, 34, 21): 3, 
(48, 98, 71): 3, (98, 71, 48): 3, (56, 23, 48): 3})

我想要得到的结果是:

Counter({(23, 56, 48): 3, (48, 98, 71): 3, (48, 93, 81): 1, (54, 34, 21): 1})

1 个答案:

答案 0 :(得分:2)

您需要将具有相同值的元组映射到相同的,一种方法是对元组进行排序(使用sorted):

from collections import Counter

L = [(23,56,48),(48,93,81),(48,56,23),(54,34,21),(48,98,71),(98,71,48),(56,23,48)]


result = Counter(tuple(e) for e in map(sorted, L))
print(result)

输出

Counter({(23, 48, 56): 3, (48, 71, 98): 2, (21, 34, 54): 1, (48, 81, 93): 1})