Ich versuche eine Möglichkeit zu finden, alle möglichen Permutationen eines Strings zu erzeugen, der ein paar sich wiederholende Zeichen hat, aber wiederholte Tupel nicht erzeugt.Wie man Permutationen generiert, ohne wiederholende Ergebnisse, aber mit einer festen Anzahl von Zeichen zu erzeugen Python
Momentan verwende ich itertools.permutations()
. Es funktioniert, aber ich muss die Wiederholung entfernen und ich kann nichtset()
verwenden, um die Wiederholung zu entfernen.
Welche Art von Ergebnissen erwarte ich? Nun, zum Beispiel möchte ich alle Kombinationen für DDRR
bekommen, die Sache mit itertools.permutations()
ist, dass ich DDRR
etwa vier Mal bekommen würde, vorausgesetzt, dass itertools
sieht die s, als ob sie anders waren, gleich mit R
s.
Mit list(itertools.permutations('DDRR'))
ich:
[('D', 'D', 'R', 'R'), ('D', 'D', 'R', 'R'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('D', 'D', 'R', 'R'), ('D', 'D', 'R', 'R'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('D', 'R', 'D', 'R'), ('D', 'R', 'R', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'R', 'D', 'D'), ('R', 'R', 'D', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'D', 'D', 'R'), ('R', 'D', 'R', 'D'), ('R', 'R', 'D', 'D'), ('R', 'R', 'D', 'D')]
Das ideale Ergebnis, das ich will, ist:
[('D', 'R', 'R', 'D'), ('R', 'D', 'R', 'D'), ('R', 'R', 'D', 'D'), ('D', 'R', 'D', 'R'), ('D', 'D', 'R', 'R'), ('R', 'D', 'D', 'R')]
Warum können Sie 'set' nicht verwenden? Was ist daran schlimm? –
Weil ich einen Speicherfehler erhalte. Ich benutze sehr sehr lange Saiten. –
Es ist eine Design-Wahl, es gibt einige Problemumgehungen, siehe: http://StackOverflow.com/Questions/6534430/Why-does-pythons-Iertools-Permutationen-Contain-Duplicates-when-the-original – ifma