【发布时间】:2011-01-16 18:40:04
【问题描述】:
我是 python 新手,并且有以下具有嵌套循环的测试代码,并且生成了一些意想不到的列表:
import pybel
import math
import openbabel
search = ["CCC","CCCC"]
matches = []
#n = 0
#b = 0
print search
for n in search:
print "n=",n
smarts = pybel.Smarts(n)
allmol = [mol for mol in pybel.readfile("sdf", "zincsdf2mols.sdf.txt")]
for b in allmol:
matches = smarts.findall(b)
print matches, "\n"
基本上,“搜索”列表是我希望在某些分子中匹配的几个字符串,我想使用 pybel 软件迭代 allmol 中包含的每个分子中的两个字符串。但是,我得到的结果是:
['CCC', 'CCCC']
n= CCC
[(1, 2, 28), (1, 2, 4), (2, 4, 5), (4, 2, 28)]
[]
n= CCCC
[(1, 2, 4, 5), (5, 4, 2, 28)]
[]
正如预期的那样,除了一些额外的空列表,它们让我很困惑,我看不到它们来自哪里。它们出现在“\n”之后,因此不是 smarts.findall() 的人工制品。我究竟做错了什么? 感谢您的帮助。
【问题讨论】:
-
无关:将
llmol = [mol for mol in pybel.readfile("sdf", "zincsdf2mols.sdf.txt")]移出循环。
标签: python list for-loop openbabel