TypeError: '>=' не поддерживается между экземплярами 'tuple' и 'float'

Я пытаюсь написать небольшой скрипт на Python, который вычисляет индекс сходства Танимото между интересующей молекулой и базой данных молекул. Я использую пибел.

База данных в формате .smi содержит химическую информацию о молекулах в первом столбце и их названия во втором и выглядит следующим образом:

      C[C@]12CC[C@H](C1(C)C)CC2=O     (-)-CAMPHOR
CC1=CC[C@H](C(=C)C)C[C@@H]1O    (-)-CARVEOL
CC1=CC[C@H](CC1=O)C(=C)C        (-)-CARVONE
O=CC[C@@H](C)CCC=C(C)C  (-)-CITRONELLAL
OCC[C@@H](C)CCC=C(C)C   (-)-CITRONELLOL
C[C@@H]1CC[C@@H](C(=C)C)C[C@H]1O        (-)-DIHYDROCARVEOL
C[C@@]12CC[C@@H](C1)C(C2=O)(C)C (-)-Fenchone
C[C@@H]1CC[C@H]([C@@H](C1)O)C(C)C       (-)-MENTHOL
C[C@@H]1CC[C@H](C(=O)C1)C(C)C   (-)-MENTHONE
C[C@@H]1CCCCCCCCCCCCC(=O)C1     (-)-MUSCONE
CC(=C)[C@H]1CCC(=CC1)C=O        (-)-PERILLALDEHYDE
.
.
.

Эта версия скрипта работает так, как я ожидаю:

      from openbabel import pybel

targetmol = next(pybel.readfile("smi", "/path/to/sample.smi"))

targetfp = targetmol.calcfp()              <--- calculate fingerprints of the sample

for mol in pybel.readfile("smi", "/path/to/db.smi"):

    fp = mol.calcfp()                      <--- calculate fingerprints of the db

    tan = fp | targetfp                    <--- calculate the Tanimoto index via the "|" operator

    if tan>=0.8:

        print(tan)

Выход:

      1.0
1.0
0.9285714285714286
0.8571428571428571
1.0
1.0
0.9285714285714286
0.8571428571428571
.
.
.

Понятно, что для того, чтобы придать смысл полученным числам, мне нужно добавить название молекулы к соответствующему индексу Танимото. Я пробовал это:

      from openbabel import pybel

targetmol = next(pybel.readfile("smi", "/path/to/sample.smi"))

targetfp = targetmol.calcfp()              

for mol in pybel.readfile("smi", "/path/to/db.smi"):

    fp = mol.calcfp()                      

    tan = (fp | targetfp, mol.title)                   

    if tan>=0.8:

        print(tan, title)

Как из названия, я получаю следующую ошибку:

      Traceback (most recent call last):
  File "test3.py", line 15, in <module>
    if tan>=0.8:
TypeError: '>=' not supported between instances of 'tuple' and 'float'

Я предполагаю, что python, очевидно, не может применитьif tan>=0.8операции в строковый формат, но я действительно не знаю, как решить эту проблему, так как, как вы можете догадаться, я очень новичок в программировании.

Любые подсказки о том, как исправить этот фрагмент кода, будут оценены. Спасибо за ваше время.

1 ответ

Вам просто нужно изменить его на:tan[0] >= 0.8:

запятая,(тот, что внутриtan = (fp | targetfp, mol.title)) — это синтаксис для кортежа, который в основном представляет собой неизменяемый массив, поэтому для доступа к элементам вам нужно делать это по индексу, как для списков.

Другие вопросы по тегам