Как сравнить вхождения в одном и том же списке кортежей - PullRequest
0 голосов
/ 02 января 2019

У меня есть список таких кортежей: 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 голосов
/ 02 января 2019

Вам необходимо отобразить кортежи с одинаковыми значениями на одну и ту же клавишу , один из способов - сортировка кортежей (используя 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})
...