Я пытаюсь написать функцию python, которая принимает два списка в качестве входных: один, который содержит некоторые молекулы SMILES-коды, а другой - имена молекул.Функция python, которая отбрасывает молекулы, которые слишком похожи на основе коэффициента Tanimoto?
Затем он вычисляет коэффициент TANIMOTO между всеми парами молекул (у меня уже есть функция для этого) и возвращает два новых списка с SMILES и именами соответственно молекул, чей Tanimoto с любым другим не выше, чем определенный порог.
Это то, что я сделал до сих пор, но это дает неверные результаты (большинство молекул, которые я получаю почти то же самое ...):
def TanimotoFilter(molist,namelist,threshold):
# molist is the smiles list
# namelist is the name list (SURPRISE!) is this some global variable name?
# threshold is the tanimoto threshold (SURPRISE AGAIN!)
smilesout=[]
names=[]
tans=[]
exclude=[]
for i in range(1,len(molist)):
if i not in exclude:
smilesout.append(molist[i])
names.append(namelist[i])
for j in range(i,len(molist)):
if i==j:
tans.append('SAME')
else:
tanimoto=tanimoto_calc(molist[i],molist[j])
if tanimoto>threshold:
exclude.append(j)
#print 'breaking for '+str(i)+' '+str(j)
break
else:
tans.append(tanimoto)
return smilesout, names, tans
Я был бы очень благодарен, если модификации вы предлагаете как можно более базовые, так как этот код предназначен для людей, которые почти не видели терминал в своей жизни ... Не имеет значения, полно ли он петель, которые замедляют работу.
Спасибо всем!
Hi Vivek! Спасибо за вашу идею. Он отлично работает (я думаю). Список танов был фактически списком списков (я неправильно написал функцию). Благодаря вашей идее я смог получить также этот список списков со всеми коэффициентами Tanimoto между всеми парами молекул. – user3091644