Вычислить ранг комбинации?

Я хочу предварительно вычислить некоторые значения для каждой комбинации в наборе комбинаций. Например, при выборе 3 чисел от 0 до 12 я вычислю некоторое значение для каждого из них:

>>> 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...

Я хочу сохранить эти значения в массиве, чтобы при заданной комбинации я мог вычислить ее и получить значение. Например:

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

Что быmagic быть?

Первоначально я думал просто сохранить ее в виде 3-мерной матрицы размером 13 x 13 x 13, так что я могу легко индексировать ее таким образом. В то время как это 13 хорошо для выбора 3, это будет слишком много для чего-то вроде 13 выбора 7.

Я не хочу использовать dict, потому что в конечном итоге этот код будет на C, а массив в любом случае будет гораздо более эффективным.

ОБНОВЛЕНИЕ: У меня также есть похожая проблема, но я использую комбинации с повторениями, поэтому любые ответы о том, как получить их рейтинг, будут высоко оценены =).

ОБНОВЛЕНИЕ: Чтобы было ясно, я пытаюсь сохранить пространство. Каждая из этих комбинаций фактически превращается во что-то, занимающее много места, скажем, 2 килобайта. Если бы я использовал массив 13x13x13, это было бы 4 мегабайта, из которых мне нужно только 572 килобайта с использованием (13 выбирают 3) точек.

Ответы на вопрос(7)

Ваш ответ на вопрос