Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python循环中出现意外列表_Python_List_For Loop_Openbabel - Fatal编程技术网

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

我是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" 
本质上,列表“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新手”。