Генерация всех уникальных парных перестановок

Мне нужно сгенерировать все возможные пары, но с ограничением, что конкретное соединение встречается только один раз в результатах. Так, например:

import itertools

for perm in itertools.permutations(range(9)):
    print zip(perm[::2], perm[1::2])

генерирует все возможные двухпарные перестановки; Вот'Небольшое подмножество вывода:

...
[(8, 4), (7, 6), (5, 3), (0, 2)]
[(8, 4), (7, 6), (5, 3), (1, 0)]
[(8, 4), (7, 6), (5, 3), (1, 2)]
[(8, 4), (7, 6), (5, 3), (2, 0)]
[(8, 4), (7, 6), (5, 3), (2, 1)]
[(8, 5), (0, 1), (2, 3), (4, 6)]
[(8, 5), (0, 1), (2, 3), (4, 7)]
[(8, 5), (0, 1), (2, 3), (6, 4)]
[(8, 5), (0, 1), (2, 3), (6, 7)]
[(8, 5), (0, 1), (2, 3), (7, 4)]
[(8, 5), (0, 1), (2, 3), (7, 6)]
[(8, 5), (0, 1), (2, 4), (3, 6)]
[(8, 5), (0, 1), (2, 4), (3, 7)]
[(8, 5), (0, 1), (2, 4), (6, 3)]
...

Как мне дополнительно отфильтровать его, чтобы я когда-либо видел (8,4) только один раз (во всех отфильтрованных перестановках), и (8,5) только один раз, и (0,1) только один раз, и (4,7 ) только один раз и т. д.?

По сути, я хочу, чтобы перестановки были такими, чтобы каждое двухэлементное спаривание происходило только один раз.

поспорим тамs дополнительный itertool, который решил бы это, но яЯ не достаточно эксперт, чтобы знать, что это такое.

Обновить: Гарет Рис прав: я совершенно не знал, что пытаюсь решить проблему с круговым циклом. У меня есть дополнительное ограничение, это то, что яЯ делаю, группирую людей для парных упражнений. Таким образом, если у меня нечетное количество людей, мне нужно создать группу из трех человек, включающую нечетного человека для каждого упражнения. Мое текущее мышление состоит в том, чтобы (1) создать четное число людей, добавив невидимого человека. Затем, после объединения, найдите человека в паре с человеком-невидимкой и случайным образом поместите его в существующую группу, чтобы сформировать команду из трех человек. Тем не менее, мне интересно, если нетt уже алгоритм или корректировка для циклического перебора, который делает это лучше.

Обновление 2: Феодрос Решение дает абсолютно правильный результат без лишних размышлений, о которых я описал выше. Каждый'было удивительно полезно.

Ответы на вопрос(3)

Ваш ответ на вопрос