Generieren aller eindeutigen Paarpermutationen

Ich muss alle möglichen Paarungen generieren, aber mit der Einschränkung, dass eine bestimmte Paarung nur einmal in den Ergebnissen auftritt. Also zum Beispiel:

import itertools

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

generiert alle möglichen zwei gepaarten Permutationen; Hier ist eine kleine Teilmenge der Ausgabe:

...
[(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)]
...

Wie kann ich es weiter filtern, sodass ich (8,4) immer nur einmal (in allen gefilterten Permutationen) und (8,5) nur einmal und (0,1) nur einmal und (4,7) sehe? ) nur einmal usw.?

Grundsätzlich möchte ich die Permutationen so, dass jede Zwei-Elemente-Paarung nur einmal vorkommt.

Ich wette, es gibt ein zusätzliches Tool, mit dem das Problem behoben werden kann, aber ich bin nicht sachkundig genug, um zu wissen, was es ist.

Aktualisieren: Gareth Rees hat recht - ich wusste gar nicht, dass ich versucht habe, das Round-Robin-Problem zu lösen. Ich habe eine zusätzliche Einschränkung, nämlich, dass ich Leute für Paarprogrammierungsübungen gruppiere. Wenn ich also eine ungerade Anzahl von Personen habe, muss ich eine Dreiergruppe bilden, um für jede Übung eine ungerade Person aufzunehmen. Mein gegenwärtiger Gedanke ist, (1) eine gerade Anzahl von Menschen zu machen, indem ich eine unsichtbare Person hinzufüge. Suchen Sie nach dem Pairing die Person, die mit der unsichtbaren Person gepaart ist, und ordnen Sie sie nach dem Zufallsprinzip einer vorhandenen Gruppe zu, um ein Dreierteam zu bilden. Ich frage mich jedoch, ob es noch keinen Algorithmus oder keine Anpassung für Round-Robin gibt, die dies besser macht.

Update 2: Die Lösung von Theodros liefert genau das richtige Ergebnis, ohne dass der unelegante Schwindel, den ich oben beschrieben habe, aufkommt. Jeder war unglaublich hilfreich.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage