Rang einer Kombination berechnen?

Ich möchte einige Werte für jede Kombination in einer Reihe von Kombinationen vorberechnen. Wenn Sie zum Beispiel 3 Zahlen von 0 bis 12 auswählen, berechne ich für jede einen Wert:

>>> for n in choose(range(13), 3):
    print n, foo(n)

(0, 1, 2) 78
(0, 1, 3) 4
(0, 1, 4) 64
(0, 1, 5) 33
(0, 1, 6) 20
(0, 1, 7) 64
(0, 1, 8) 13
(0, 1, 9) 24
(0, 1, 10) 85
(0, 1, 11) 13
etc...

Ich möchte diese Werte in einem Array speichern, damit ich sie bei gegebener Kombination berechnen und den Wert abrufen kann. Beispielsweise

>>> a = [78, 4, 64, 33]
>>> a[magic((0,1,2))]
78

Was würdemagic Sein

m Anfang dachte ich, ich speichere es einfach als 3-D-Matrix der Größe 13 x 13 x 13, damit ich es auf diese Weise leicht indizieren kann. Dies ist zwar in Ordnung für 13, wählen Sie 3, dies hätte jedoch viel zu viel Overhead für 13, wählen Sie 7.

Ich möchte kein Diktat verwenden, da sich dieser Code schließlich in C befindet und ein Array sowieso viel effizienter ist.

UPDATE: Ich habe auch ein ähnliches Problem, aber wenn ich Kombinationen mit Wiederholungen benutze, wären alle Antworten, wie man den Rang von diesen erhält, sehr dankbar =).

UPDATE: Um es klar zu machen, versuche ich Platz zu sparen. Jede dieser Kombinationen nimmt viel Platz in Anspruch, sagen wir 2 Kilobyte. Wenn ich ein 13x13x13-Array verwenden würde, wären das 4 Megabyte, von denen ich nur 572 Kilobyte mit (13 wählen Sie 3) Spots benötige.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage