使用RDKIT时出现object is not iterable错误

When using RDKIT, object is not iterable error appears

我正在尝试使用 tanimoto 相似性来比较使用 rdkit 的分子指纹。我正在尝试将列表 1 中的两项与列表 2 中的一项进行比较。但是,我收到错误消息。我不明白,因为我的代码中有任何名为“Mol”的东西。有人有建议吗?谢谢

from rdkit import Chem
from rdkit.Chem import rdFingerprintGenerator
from rdkit.Chem import DataStructs
mol1 = ('CCO', 'CCOO')
mol2 = ('CC')
fii = Chem.MolFromSmiles(mol2)
fpgen1 = rdFingerprintGenerator.GetMorganGenerator(radius=2)
fps1 = [fpgen1.GetFingerprint(m) for m in fii]
for m in mol1:
    fi = Chem.MolFromSmiles(m)
    fpgen2 = rdFingerprintGenerator.GetMorganGenerator(radius=2)
    fps2 = [fpgen2.GetFingerprint(m) for m in fi]
    for x in fsp2:
        t = DataStructs.TanimotoSimilarity(fps1, fps2(x))
        print(t)

错误: fps1 = [fpgen1.GetFingerprint(m) for m in fii] 类型错误:'Mol' 对象不可迭代

  • Mol 对象是调用 Chem.MolFromSmiles 时返回的 rdkit class 的名称,而不是您的变量名称之一。
  • 错误说 Mol 对象不可迭代(它是单个分子)
from rdkit import Chem
from rdkit.Chem import rdFingerprintGenerator
from rdkit.Chem import DataStructs

smiles1 = ('CCO', 'CCOO')
smiles2 = ('CC',)

mols1 = [Chem.MolFromSmiles(smi) for smi in smiles1]
mols2 = [Chem.MolFromSmiles(smi) for smi in smiles2]

# you only need to instantiate the generator once, you can use it for both lists
fpgen = rdFingerprintGenerator.GetMorganGenerator(radius=2)

fps1 = [fpgen.GetFingerprint(m) for m in mols1]
fps2 = [fpgen.GetFingerprint(m) for m in mols2]

# if you only care about the single entry in fps2 you can just index it
for n, fp in enumerate(fps1):
    t = DataStructs.TanimotoSimilarity(fp, fps2[0])
    print(n, t)