назначить извлекаемый уникальный идентификатор для изменения лямбда-списка в Python? - PullRequest
0 голосов
/ 24 ноября 2010
def a(p): return p + 1

def b(p): return p + 2

def c(p): return p + 3

l= [a,b,c]

import itertools
ll = itertools.combinations(l, 2)

[x for x in ll]
[(<function a at 0x00CBD770>, <function b at 0x00CBD7F0>),
 (<function a at 0x00CBD770>, <function c at 0x00BB27F0>),
 (<function b at 0x00CBD7F0>, <function c at 0x00BB27F0>)]

Q1: здесь, как вернуть лямбда-список в простых строках:

[a(b(1)),  # not the result of a(b(1)), but just a lambda object
 a(c(1)),  # also items may more than 2 here if itertools.combinations(l, 4)
 b(c(1))]

Q2:

предположим, я определил другую функцию d

def d(p): return p + 4

l= [a,b,c,d]
ll = itertools.combinations(l, 2)

[(<function a at 0x00CBD770>, <function b at 0x00CBD7F0>),
 (<function a at 0x00CBD770>, <function c at 0x00BB27F0>),
 (<function a at 0x00CBD770>, <function d at 0x00CBDC70>),
 (<function b at 0x00CBD7F0>, <function c at 0x00BB27F0>),
 (<function b at 0x00CBD7F0>, <function d at 0x00CBDC70>),
 (<function c at 0x00BB27F0>, <function d at 0x00CBDC70>)]

эта комбинация с другой последовательностью сравнивается с последней:

ab,ac,ad,bc,bd,cd
=================
ab,ac,bc

Но я хочу сохранить все возможные элементы с уникальным идентификатором, то есть независимо от того, как

l= [a,b,c,d] 

или

l= [b,a,c,d] 

пр

l= [a,b,e,d] 

Возьмите "ac" , например: "ac" и другой возможный элемент всегда с уникальной привязкой ID, тогда я могу получить доступ к "ac" этот уникальный идентификатор. Я думаю, что это похоже на создание расширяемой хеш-таблицы для каждого элемента.

Итак, можно ли присвоить int-идентификатор или "HASH" элементу лямбды? Я также хочу, чтобы эти отношения сопоставления могли быть сохранены на диске в виде файла и могут быть получены позже.

Спасибо за любую идею.

образец для объяснения Q2

=====================
l= [a,b,c,d] 
func_combos = itertools.combinations(l, 2)
compositions = [compose(f1, f2) for f1, f2 in func_combos] 

[compositions[x](100) for x in compositions]  # take very long time to finish
[result1,
 result2,
 result3,
 ... 
 ]

======== three days later on another machine ======
l= [a,c,b,e,f,g,h] 
[compositions[x](100) for x in compositions] # take very long time to finish

[newresult1,
 newresult2,
 newresult3,
 ... 
 ]

but wait: here we can saving time: take "ac" for example:

[result1, tag
 result2, tag_for_ac_aka_uniqueID_or_hash
 result3, tag
 ... 
 ]

we just need to check if the "ac" tag exists we can reduce the calculation:
if hash_of(ac) in list(result.taglist):
   copy result to new result:

1 Ответ

0 голосов
/ 24 ноября 2010

просто используйте set, чтобы избежать диктов?

Они работают для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...