Hallo,
ich habe ein List-Objekt.
Ausgangs-Objekt : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
Aus diesem Objekt möchte ich jetzt alle möglichen 6er Kombinationen,
als jeweils neues List-Objekt ableiten, wobei keine 6er Kombination doppelt vorkommen darf.
Mir ist Bewusst, dass dies einige 100.000 neue List-Objekte als Ergebnis sein werden.
Doppelt wäre zum Beispiel :
[1,2,3,4,5,6] == [6,5,4,3,2,1] oder
[1,2,3,4,5,6] == [3,2,1,4,5,6] usw.
Richtig wäre:
[1,2,3,4,5,6],
[1,2,3,4,5,7],
[1,2,3,4,5,8],
.
[6,12,13,16,17,18]
.
[13, 14, 15, 16, 17, 18]
Ich habe einige Versuche mit verschachtelten for schleifen unternommen,
jedoch waren deren Ergebnisse alle völlig unbrauchbar.
Ich habe jetzt überhaupt keine Idee mehr, wie ich dieses noch sinnvoll lösen könnte.
Über ein klein wenig Hilfe würde ich mich sehr freuen. Vielen Dank.
Aus einem List-Objekt alle möglichen Kombinationen ableiten
-
- User
- Beiträge: 37
- Registriert: Donnerstag 17. Mai 2012, 21:28
Suchst du vielleicht combinations aus der itertools library?
@uweddf: Einige 100.000 ist ein wenig übertrieben. Bei dem Beispiel sind es nur 18.564 Kombinationen.
Edit: Die Rechnung vergessen:
Edit: Die Rechnung vergessen:
Code: Alles auswählen
In [23]: math.factorial(18) / (math.factorial(6) * math.factorial(18 - 6))
Out[23]: 18564L
@BlackJack:
Ich war gerade im Keller und habe meinen HP-Taschenrechner mal wieder ausgepackt und siehe da, Du hast recht.
Obwohl mein HP der Meinung ist, das es nur 18.563 Kombinationen sind.
Da die Differenz zu 100.000 jedoch so erheblich ist, würde diese eine Kombination den Braten jetzt nicht wirklich fett machen.
Danke.
Ich war gerade im Keller und habe meinen HP-Taschenrechner mal wieder ausgepackt und siehe da, Du hast recht.
Obwohl mein HP der Meinung ist, das es nur 18.563 Kombinationen sind.
Da die Differenz zu 100.000 jedoch so erheblich ist, würde diese eine Kombination den Braten jetzt nicht wirklich fett machen.
Danke.
Dann lügt dein Taschenrechner, ist nicht genau genug oder du hast dich ganz einfach vertan.uweddf hat geschrieben:Obwohl mein HP der Meinung ist, das es nur 18.563 Kombinationen sind.
Das Leben ist wie ein Tennisball.
@EyDu:
Mein Taschenrechner lügt nie und ungenau ist er in den letzten 30 Jahren auch noch nie gewesen.
Somit ergibt sich, da ich 2 von 3 Möglichkeiten ausschließen konnten, das es eindeutig am User liegt.
Obwohl - wurde das math Modul nicht von einem Amerikaner entworfen ? Dann müssten die vorgegebenen
Möglichkeiten anders gewichten werden. Aber ich sehe gerade, dass HP made in Italy ist und dieses
gleicht das keinesfalls aus. Somit zählt das Unvermögen des Users doppelt und macht das Ergebnis nun
endgültig eindeutig.
mfg.
Mein Taschenrechner lügt nie und ungenau ist er in den letzten 30 Jahren auch noch nie gewesen.
Somit ergibt sich, da ich 2 von 3 Möglichkeiten ausschließen konnten, das es eindeutig am User liegt.
Obwohl - wurde das math Modul nicht von einem Amerikaner entworfen ? Dann müssten die vorgegebenen
Möglichkeiten anders gewichten werden. Aber ich sehe gerade, dass HP made in Italy ist und dieses
gleicht das keinesfalls aus. Somit zählt das Unvermögen des Users doppelt und macht das Ergebnis nun
endgültig eindeutig.
mfg.
Hallo,
ich habe die Anzahl erstellter Listen mit len(list(itertools.combinations(xrange(18), 6))) geprüft und siehe da,
es sind genau 18.564.
Somit ist
math.factorial(18) / (math.factorial(6) * math.factorial(18 - 6)) == len(list(itertools.combinations(xrange(18), 6)))
somit sind alle Fragen eindeutig beantwortet.
vielen Dank.
ich habe die Anzahl erstellter Listen mit len(list(itertools.combinations(xrange(18), 6))) geprüft und siehe da,
es sind genau 18.564.
Somit ist
math.factorial(18) / (math.factorial(6) * math.factorial(18 - 6)) == len(list(itertools.combinations(xrange(18), 6)))
somit sind alle Fragen eindeutig beantwortet.
vielen Dank.
@uweddf: Was hast Du denn für einen HP? Mein 48G kommt auf die korrekten 18.564 wenn ich ``18 6 COMB`` eingebe. Sowohl das Originalgerät als auch der Emulator (Droid48) den ich auf dem Smartphone installiert habe weil ich mich an den Taschenrechner so gewöhnt habe.
Edit: Auch wenn ich die Formel manuell ausrechne (``18 ! 6 ! 18 6 - * /``) kommt das richtige Ergebnis heraus.
Edit: Auch wenn ich die Formel manuell ausrechne (``18 ! 6 ! 18 6 - * /``) kommt das richtige Ergebnis heraus.