Permutationen mit Bedingung
Verfasst: Sonntag 29. April 2018, 10:48
Ich versuche gerade aus einer "langen" Liste alle möglichen Permutationen zu generieren die eine bestimmte Bedingung erfüllen.
z.B. [A,B,C,D,E,F,G,.....X,Y,Z]. Bedingung z.B.: An erster Stelle muss immer A oder C stehen und an 3. Stellen X oder Z
1. Idee:
Verschachtelte Schleifen, d.h. eine Schleife für jedes Element in der Liste mit Abfrage der jeweiligen Bedingung.
Und ja, ich bin noch absoluter Anfänger aber die verschachtelten Schleifen kamen mir spontan als einfachste Lösung vor sofern die Liste nicht gerade 50+ Elemente hat.
Siehe da, Python kann anscheinend nur max. 20 Schleifen ineinander verschachteln.
Was also tun wenn die Liste mehr als 20 Elemente hat?
2. Idee:
mit Hilfe von itertools.permutations erstmal alle möglichen Permutationen erstellen.
Soweit ich das jetzt verstanden habe ist das Ergebnis von permutations() eine Liste mit Tupeln.
Im Anschluss jedes Tupel auf die Bedingung prüfen und ggf. entfernen.
Leider sprengt die Liste mit allen möglichen Permutationen den Arbeitsspeicher und es führt zu einem Memory Error.
Also bin ich auf der Suche nach einer Möglichkeit die Permutationen schon vorab über eine Bedingung zu prüfen.
Hat jemand eine Idee?
z.B. [A,B,C,D,E,F,G,.....X,Y,Z]. Bedingung z.B.: An erster Stelle muss immer A oder C stehen und an 3. Stellen X oder Z
1. Idee:
Verschachtelte Schleifen, d.h. eine Schleife für jedes Element in der Liste mit Abfrage der jeweiligen Bedingung.
Und ja, ich bin noch absoluter Anfänger aber die verschachtelten Schleifen kamen mir spontan als einfachste Lösung vor sofern die Liste nicht gerade 50+ Elemente hat.
Siehe da, Python kann anscheinend nur max. 20 Schleifen ineinander verschachteln.
Was also tun wenn die Liste mehr als 20 Elemente hat?
2. Idee:
mit Hilfe von itertools.permutations erstmal alle möglichen Permutationen erstellen.
Soweit ich das jetzt verstanden habe ist das Ergebnis von permutations() eine Liste mit Tupeln.
Im Anschluss jedes Tupel auf die Bedingung prüfen und ggf. entfernen.
Leider sprengt die Liste mit allen möglichen Permutationen den Arbeitsspeicher und es führt zu einem Memory Error.
Also bin ich auf der Suche nach einer Möglichkeit die Permutationen schon vorab über eine Bedingung zu prüfen.
Hat jemand eine Idee?