Mit dem itertools
-Werkzeug habe ich alle möglichen Permutationen einer gegebenen Liste von Zahlen, aber wenn die Liste wie folgt ist:
itertools
weiß nicht, dass das Iterieren der Nullen eine verschwendete Arbeit ist, zum Beispiel erscheinen die folgenden Iterationen in den Ergebnissen:
sie sind gleich, aber itertools
nimmt nur die erste Null (zum Beispiel) und verschiebt sie an die vierte Stelle in der Liste und umgekehrt.
Die Frage ist: Wie kann ich nur einige ausgewählte Zahlen iterieren und andere wie z. B. Null lassen? Es kann mit oder ohne itertools
sein.
Voilá - es funktioniert jetzt - nachdem ich die Permutationen auf dem "Fleisch" bekommen habe, bekomme ich alle möglichen Kombinationen für die "0" s Positionen und Ausbeute eine Permutation für jede mögliche Menge von "0 Positionen" für jede Permutation der Nicht-0s:
%Vor% (Ich habe Pythons 3 "nonlocal" Schlüsselwort verwendet - wenn Sie noch auf Python 2.7 sind,
Sie müssen einen anderen Ansatz wählen, wie zum Beispiel seq_len
zu einer Liste mit einem einzelnen Element zu machen, das Sie dann auf die innere Funktion setzen können)
Mein zweiter Versuch (der arbeitende ist eigentlich der dritte)
Dies ist ein naive Ansatz, der nur einen Cache der bereits "gesehenen" Permutationen enthält - er spart die Arbeit für jede Permutation, aber nicht die Arbeit, um alle möglichen Permutationen zu erzeugen:
%Vor%Hängen Sie jedes Ergebnis an eine Liste an. Jetzt haben Sie jede mögliche Kombination und machen dann folgendes:
%Vor%Mit Set wird die Liste auf die einzelnen Permutationen beschränkt. Ich bin mir nicht ganz sicher, ob dies das Problem ist, das Sie lösen wollen, oder Sie sorgen sich um die Leistung. Egal, ich machte nur einen Account, also dachte ich, ich würde versuchen, etwas beizutragen
Tags und Links python permutation list