vuxi
Anmeldungsdatum: 9. November 2007
Beiträge: 187
|
Hallo ich habe Listen verschiedener vorher unbekannter Länge. Die werden erst im Programmablauf erzeugt. A = (1,2,3,4,5) B = (21,22,23) C = (12,13,14,15) was ich am Schluss brauche sind alle Kombinationen folgender Art D = (x,y,z) mit x € A , y € B , z € C Ich kann natürlich diverse Schleifen ineinander bauen (geht nicht nur um 3 Listen) aber geschickt erscheint mir das nicht. Gibts da irgendeine schlauerer Lösung ? vuxi
|
Barabbas
Anmeldungsdatum: 31. März 2007
Beiträge: 1651
Wohnort: Münster
|
Itertools ist vermutlich, was du suchst: list(itertools.permutations([1,2,3,4])) Ansonsten gibt es unter dem Stichwort "python permutation" echt extrem viel - sogar ein YT-Video 😉. Schöne Grüße, ich hoffe, das war, was du suchtest. brb //edit: Die Funktion list() ist natürlich überflüssig, wenn du über das Ergebnis iterieren möchtest.
|
vuxi
(Themenstarter)
Anmeldungsdatum: 9. November 2007
Beiträge: 187
|
Barabbas schrieb: Itertools ist vermutlich, was du suchst: list(itertools.permutations([1,2,3,4])) Ansonsten gibt es unter dem Stichwort "python permutation" echt extrem viel - sogar ein YT-Video 😉. Schöne Grüße, ich hoffe, das war, was du suchtest. brb //edit: Die Funktion list() ist natürlich überflüssig, wenn du über das Ergebnis iterieren möchtest.
Ne leider nicht. Das Ding spuckt mir ja nur die Permutation der vier Zahlen aus ( 1,2,3,4 ). Ich habe für jede Stelle des Vektors eine Liste an Zahlen. Die Zahlen sollen jeweils nur an dieser Stelle vorkommen. Und davon will ich alle Kombinationen Beispiel A = (1,2) B = (3,4) –> C1 = (1,3) C2 = (1,4) C3 = (2,3) C4 = (2,4)
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Hi vuxi,
... diverse Schleifen ineinander bauen .. aber geschickt erscheint mir das nicht.
Warum nicht ? - über die verschiedenen Komponenten iterieren musst Du sowieso, egal ob implizit durch eine Bibliothek oder ausdrücklich in einem Skript. Und die Anzahl Verktoren bleibt auch die selbe. Vom Tempo her macht das wenig aus, selbst bei einem bash-Skript. (btw. - in welcher Sprache willst Du das eigentlich programmieren ?) (siehe unten) Jedenfalls würde ich auch nur einfach 3 for-Schleifen schachteln und fertig. Wenn so ein Programm zu lahm läuft, könnte man am ehesten durch zusammenfassen ähnlicher Vektoren etwas optimieren, auf der Ebene. LG, track
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
track schrieb: (btw. - in welcher Sprache willst Du das eigentlich programmieren ?)
In Python - steht auch im Titel 😉
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Sorry, ich glaube meine Brille war beschlagen ... 😳 track
|
vuxi
(Themenstarter)
Anmeldungsdatum: 9. November 2007
Beiträge: 187
|
Es ging mir auch nicht um die Geschwindigkeit. Das Programm wird nicht so oft genutzt werden, dass es darauf ankommt. Wollte eigentlich nur wissen ob man das eleganter lösen kann, um eventuell anderen Leuten die das Ding mal umschreiben wollen (z.B. den Vektor um ein paar Komponenten erweitern) die Arbeit zu erleichtern. track schrieb: Jedenfalls würde ich auch nur einfach 3 for-Schleifen schachteln und fertig.
Es geht mindestens um 6 Einträge im Vektor und damit mindestens 6 geschachtelte Schleifen.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17604
Wohnort: Berlin
|
Das heißt dann nicht Permutation, sondern Kreuzprodukt, oder?
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
| >>> list(itertools.product((1,2), (3,4)))
[(1, 3), (1, 4), (2, 3), (2, 4)]
|
|
vuxi
(Themenstarter)
Anmeldungsdatum: 9. November 2007
Beiträge: 187
|
Herzlichen Dank. Das ist genau das was ich gesucht habe.
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
user unknown schrieb: Das heißt dann nicht Permutation, sondern Kreuzprodukt, oder?
Jupp, oder auch kartesisches Produkt genannt. Genau dafür ist itertools.product() gemacht worden.
|
vuxi
(Themenstarter)
Anmeldungsdatum: 9. November 2007
Beiträge: 187
|
Ja ich stell mich auch in die Ecke. Aber die letzte Mathevorlesung ist auch einige Jahre her ☺
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
vuxi schrieb: Ja ich stell mich auch in die Ecke. Aber die letzte Mathevorlesung ist auch einige Jahre her ☺
Ich wollt schon sagen. Du hast dich mit dem Begriff "Permutation" hier ein bißchen vertan. 😉
|