Seite 1 von 1
Aus einem List-Objekt alle möglichen Kombinationen ableiten
Verfasst: Dienstag 4. Februar 2014, 22:30
von uweddf
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.
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Dienstag 4. Februar 2014, 22:38
von DaftWullie
Suchst du vielleicht
combinations aus der itertools library?
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Dienstag 4. Februar 2014, 23:00
von uweddf
@DaftWullie
Das sieht schon einmal viel besser aus, als meine Versuche.
Ich werde es damit probieren.
Vielen Dank
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Dienstag 4. Februar 2014, 23:36
von BlackJack
@uweddf: Einige 100.000 ist ein wenig übertrieben. Bei dem Beispiel sind es nur 18.564 Kombinationen.
Edit: Die Rechnung vergessen:
Code: Alles auswählen
In [23]: math.factorial(18) / (math.factorial(6) * math.factorial(18 - 6))
Out[23]: 18564L
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Mittwoch 5. Februar 2014, 00:52
von uweddf
@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.
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Mittwoch 5. Februar 2014, 01:17
von EyDu
uweddf hat geschrieben:Obwohl mein HP der Meinung ist, das es nur 18.563 Kombinationen sind.
Dann lügt dein Taschenrechner, ist nicht genau genug oder du hast dich ganz einfach vertan.
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Mittwoch 5. Februar 2014, 01:46
von uweddf
@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.
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Mittwoch 5. Februar 2014, 02:29
von uweddf
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.
Re: Aus einem List-Objekt alle möglichen Kombinationen ablei
Verfasst: Mittwoch 5. Februar 2014, 09:12
von BlackJack
@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.