Ich muss alle möglichen Paarungen generieren, aber mit der Einschränkung, dass eine bestimmte Paarung nur einmal in den Ergebnissen auftritt. So zum Beispiel:Generieren aller eindeutigen Paarpermutationen
import itertools
for perm in itertools.permutations(range(9)):
print zip(perm[::2], perm[1::2])
generiert alle möglichen Zwei-paarweise 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, so dass ich immer nur (8,4) sehe einmal (in all gefilterten Permutationen) und (8,5) nur einmal , und (0,1) nur einmal und (4,7) nur einmal, usw.?
Grundsätzlich möchte ich die Permutationen so, dass jede Zwei-Element-Paarung nur einmal passiert.
Ich wette, es gibt ein zusätzliches Itertool, das das lösen würde, aber ich bin nicht Experte genug, um zu wissen, was es ist.
aktualisieren: Gareth Rees ist richtig - ich gar nicht bewusst war, dass ich das Round-Robin-Problem zu lösen versuchte. Ich habe eine zusätzliche Einschränkung, nämlich dass ich Leute für Paarprogrammierungsübungen gruppiere. Wenn ich also eine ungerade Anzahl von Leuten habe, muss ich eine Dreiergruppe bilden, um eine ungerade Person für jede Übung einzubeziehen. Mein gegenwärtiges Denken ist, (1) eine gerade Zahl von Leuten zu machen, indem ich eine unsichtbare Person hinzufüge. Suchen Sie dann nach der Paarung die Person, die mit der unsichtbaren Person gepaart ist, und setzen Sie sie zufällig in eine bestehende Gruppe ein, um eine Dreiergruppe zu bilden. Ich frage mich jedoch, ob es nicht bereits einen Algorithmus oder eine Anpassung an das Round-Robin gibt, der dies besser macht.
Update 2: Theodros 'Lösung produziert genau das richtige Ergebnis ohne die unelegante Schminke, die ich oben beschrieben habe. Jeder war unglaublich hilfreich.
Was genau meinst du mit einer Paarung? Durch eine Permutation? [(0, 1), (2, 3), (4, 5), (6, 7)] würde normalerweise weder eine Permutation noch eine Paarung von [0, 1, 2, 3, ..., 8 genannt werden ]. –
Ich habe meine Antwort aktualisiert, um Ihr Update zu berücksichtigen. –