python循环中出现意外列表
我是python新手,拥有以下一段测试代码,其中包含一个嵌套循环,并且生成了一些意想不到的列表:python循环中出现意外列表,python,list,for-loop,openbabel,Python,List,For Loop,Openbabel,我是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
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"
本质上,列表“search”是我在某些分子中寻找匹配的两个字符串,我想使用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()的人工制品。我做错了什么?
感谢您的帮助。
allmol
有2项,因此您将循环两次,第二次将匹配项作为空列表
注意换行符是如何在每次换行后打印的;将“\n”
更改为”allmol
有2项,因此您将循环两次,第二次将匹配项作为空列表
请注意换行符是如何在每次之后打印的;将“\n”
更改为”也许应该这样结束
for b in allmol:
matches.append(smarts.findall(b))
print matches, "\n"
否则我不知道你为什么要将匹配项初始化为空列表
如果是这样,你可以改为写
matches = [smarts.findall(b) for b in allmol]
print matches
另一种可能是文件以空行结尾
for b in allmol:
if not b.strip(): continue
matches.append(smarts.findall(b))
print matches, "\n"
也许应该这样结束
for b in allmol:
matches.append(smarts.findall(b))
print matches, "\n"
否则我不知道你为什么要将匹配项初始化为空列表
如果是这样,你可以改为写
matches = [smarts.findall(b) for b in allmol]
print matches
另一种可能是文件以空行结尾
for b in allmol:
if not b.strip(): continue
matches.append(smarts.findall(b))
print matches, "\n"
嗯,我这里没有什么东西。我希望它从外环的“搜索”中获取第一个字符串(CCC),迭代内环中allmol中的所有分子,生成一个包含所有CCC实例的列表,然后返回到外环获取第二个字符串(CCCC),并执行相同的操作,只生成与此相同的列表(两个)。我还是不知道那些多余的在哪里created@Shughes:打印allmol。它的长度为2,这就是为什么allmol中b的循环在搜索中每n迭代两次。4个findall->4个输出。很明显,嗯,我没有得到什么。我希望它从外环的“搜索”中获取第一个字符串(CCC),迭代内环中allmol中的所有分子,生成一个包含所有CCC实例的列表,然后返回到外环获取第二个字符串(CCCC),并执行相同的操作,只生成与此相同的列表(两个)。我还是不知道那些多余的在哪里created@Shughes:打印allmol。它的长度为2,这就是为什么allmol中b的循环在搜索中每n迭代两次。4个findall->4个输出。非常明显。不相关:从循环中移出llmol=[pybel.readfile(“sdf”,“zincdf2mols.sdf.txt”)中的mol-for-mol]
。不相关:移出llmol=[pybel.readfile中的mol-for-mol(“sdf”,“zincdf2mols.sdf.txt”)]
循环。他初始化为空列表,因为他是“python新手”.他初始化为空列表,因为他是“python新手”。