Этот вопрос ранее задавался здесь с вопиющей опечаткой: Подсчет "уникальных пар" чисел в словаре Python?
Это алгоритмическая проблема, и я не знаю наиболее эффективного решения. Моя идея состояла бы в том, чтобы как-то кэшировать значения в списке и перечислять пары ... но это было бы так медленно. Я предполагаю, что есть что-то полезное от itertools
.
Допустим, у меня есть список целых чисел, которые никогда не повторяются:
list1 = [2, 3]
В этом случае существует уникальная пара 2-3 и 3-2, поэтому словарь должен быть:
{2:{3: 1}, 3:{2: 1}}
То есть, есть 1 пара из 2-3 и 1 пара из 3-2.
Для больших списков спаривание такое же, например
list2 = [2, 3, 4]
имеет диктитон
{2:{3:1, 4:1}, 3:{2:1, 4:1}, 4:{3:1, 2:1}}
(1) Как только размер списков станет намного больше, как можно алгоритмически находить «уникальные пары» в этом формате, используя структуры данных python?
(2) Я упоминал, что списки не могут иметь повторяющиеся целые числа, например
[2, 2, 3]
невозможно, так как есть две 2.
Однако список списков может быть:
list3 = [[2, 3], [2, 3, 4]]
при этом словарь должен быть
{2:{3:2, 4:1}, 3:{2:2, 4:1}, 4:{2:1, 3:1}}
так как есть две пары 2-3 и 3-2. Как можно «обновить» словарь, учитывая несколько списков в списке?
РЕДАКТИРОВАТЬ: мой окончательный вариант использования, я хочу перебрать сотни списков целых чисел, и создать один словарь с "количеством" пар. Имеет ли это смысл? Может быть другая структура данных, которая более полезна.