我有一个像这样的元组列表:
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})
答案 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})