Примечание: Я предполагаю, что значения в списке являются уникальными и у вас есть возможность использовать индексы фактических значений (или вы готовы жертвовать время)
Если вы действительно хочу сэкономить место, я бы предложил вам использовать список списков для хранения значений для каждой комбинации. На самом деле вам не нужно хранить сопоставление (a, b) -> x.
Например, рассмотрим список:
a = [1,2,3,4]
Пусть выполнены Комбинации/пары значений являются:
(1,2) -> 2, (1,3) -> 3, (1,4) -> 4, (2,3) -> 5, (2,4) -> 6, (3,4) -> 7
Хранение для пары сочетание/значение будет выглядеть следующим образом:
comb_value = [[2,3,4],[5,6],[7]]
Извлечение:
Предполагая, что список и comb_value являются глобальными. (Мы высохнет запустить код одновременно.)
# Consider that x=2 and y=4.
def comb(x,y):
# if you can use index directly, next 2 lines should be skipped.
x= find_index(x) # Returns 1.
y= find_index(y) # Returns 3.
if x < y :
return _comb(x,y) # calling _comb(1,3)
return _comb(y,x)
# x= 1 and y =3
def _comb(x,y):
return comb_value[x][y-x-1] # returns comb_value[1][3-1] i.e. 6.
может быть '' set' из frozenset's ? 'set (frozenset ([a, b, comb (a, b)]), ...)' –
Применение фильтров к кадру данных pandas должно делать трюк. http://pandas.pydata.org/pandas-docs/version/0.18.1/generated/pandas.DataFrame.filter.html –
Можете ли вы получить доступ к комбинациям с использованием индексов вместо фактических значений? например, если у вас есть список a = [1,2,3,4], то вместо поиска гребня (2,4) вы можете использовать гребень (1,3), т. е. индексы? – Shasha99