Wie man Permutationen einer Liste erzeugt, ohne Nullen zu "bewegen". in Python

8

Mit dem itertools -Werkzeug habe ich alle möglichen Permutationen einer gegebenen Liste von Zahlen, aber wenn die Liste wie folgt ist:

%Vor%

itertools weiß nicht, dass das Iterieren der Nullen eine verschwendete Arbeit ist, zum Beispiel erscheinen die folgenden Iterationen in den Ergebnissen:

%Vor%

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.

    
V.Petretto 09.06.2016, 13:32
quelle

3 Antworten

3

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%     
jsbueno 09.06.2016, 13:55
quelle
0

Ihre Fragen sind unklar, aber wenn Sie versuchen, die Permutationen aufzulisten, ohne 0 in Ihrer Ausgabe zu haben, können Sie das folgendermaßen tun:

%Vor%     
Brian 09.06.2016 13:43
quelle
0

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

    
R. PIllai 09.06.2016 13:42
quelle

Tags und Links