Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 - Fatal编程技术网

Python 在比较两个列表时,如何在特定字符串后打印内容?

Python 在比较两个列表时,如何在特定字符串后打印内容?,python,Python,我试图比较一个列表中的字符串,如果该字符串也在另一个列表中,我想在新行上打印一些内容。不幸的是,这两个列表中有几个(数字可能不同)相同的变量在彼此下面,我想在最后一个下面打印TER。我哪里做错了 import sys import argparse def main(argv): parser = argparse.ArgumentParser(description='Add Ter records') parser.add_argument('infile', help='

我试图比较一个列表中的字符串,如果该字符串也在另一个列表中,我想在新行上打印一些内容。不幸的是,这两个列表中有几个(数字可能不同)相同的变量在彼此下面,我想在最后一个下面打印TER。我哪里做错了

import sys
import argparse

def main(argv):
    parser = argparse.ArgumentParser(description='Add Ter records')
    parser.add_argument('infile', help='input file (PDB format)')
    parser.add_argument('outfile', help='output file (PDB format)')
    parser.add_argument('reference', help =' ref')
    args = parser.parse_args()

    resnum_1 =[]
    res_1 = []
    with open(args.infile, "r") as f, open(args.outfile, "w+") as of, open(args.reference,"r") as rf:
        for line in f:
            of.write(line)
        for line in rf:
            if line[0:3]== "TER":
                resnum = line[22:27]
                resnum_1.append(resnum)
                resnum_2 = []
                for i in resnum_1:
                    resnum_2.append(i.strip())
        of.seek(0)
        for line in of:
            if line [0:4]== "ATOM":
                res = line[22:27]
                res_1.append(res)
                res_2 = []
                for i in res_1:
                    res_2.append(i.strip())
                for x in res_2:
                        if x in resnum_2 and (res_2.index(x))+1 != x:
                            of.write("\nTER\n")
                        else:
                            continue

if __name__ == "__main__":
    main(sys.argv)
infle
示例:

ATOM      1  N   GLU D 384      51.765  39.857  23.514  1.00  0.00           N  
ATOM      2  H1  GLU D 384      50.823  39.839  23.150  1.00  0.00           H  
ATOM      3  H2  GLU D 384      51.956  39.044  24.081  1.00  0.00           H  
ATOM      4  H3  GLU D 384      52.469  39.840  22.790  1.00  0.00           H  
ATOM      5  CA  GLU D 384      51.934  41.135  24.345  1.00  0.00           C  
ATOM      6  HA  GLU D 384      53.002  41.062  24.550  1.00  0.00           H  
ATOM      7  CB  GLU D 384      51.712  42.439  23.503  1.00  0.00           C  
ATOM      8  HB2 GLU D 384      52.307  42.297  22.600  1.00  0.00           H  
ATOM      9  HB3 GLU D 384      50.640  42.356  23.323  1.00  0.00           H  
ATOM     10  CG  GLU D 384      52.024  43.786  24.125  1.00  0.00           C  
ATOM     11  HG2 GLU D 384      52.138  44.557  23.363  1.00  0.00           H  
ATOM     12  HG3 GLU D 384      51.201  44.086  24.773  1.00  0.00           H  
ATOM     13  CD  GLU D 384      53.381  43.828  24.935  1.00  0.00           C  
ATOM     14  OE1 GLU D 384      53.634  43.069  25.869  1.00  0.00           O  
参考
示例:

ATOM      1  N   GLU D 384      51.765  39.857  23.514  1.00  0.00           N  
ATOM      2  H1  GLU D 384      50.823  39.839  23.150  1.00  0.00           H  
ATOM      3  H2  GLU D 384      51.956  39.044  24.081  1.00  0.00           H  
ATOM      4  H3  GLU D 384      52.469  39.840  22.790  1.00  0.00           H  
ATOM      5  CA  GLU D 384      51.934  41.135  24.345  1.00  0.00           C  
ATOM      6  HA  GLU D 384      53.002  41.062  24.550  1.00  0.00           H  
ATOM      7  CB  GLU D 384      51.712  42.439  23.503  1.00  0.00           C  
ATOM      8  HB2 GLU D 384      52.307  42.297  22.600  1.00  0.00           H  
ATOM      9  HB3 GLU D 384      50.640  42.356  23.323  1.00  0.00           H  
ATOM     10  CG  GLU D 384      52.024  43.786  24.125  1.00  0.00           C  
ATOM     11  HG2 GLU D 384      52.138  44.557  23.363  1.00  0.00           H  
TER

ATOM     12  HG3 GLU D 384      51.201  44.086  24.773  1.00  0.00           H  
ATOM     13  CD  GLU D 384      53.381  43.828  24.935  1.00  0.00           C 

如果我正确理解了您的问题,下面的代码片段应该会对您有所帮助

a = [1, 2, 3, 4, 7]
b = [1, 2, 5, 7, 16]
streak = False
for e in a:
    if e in b:
        streak = True
    elif streak:
        streak = False
        of.write("TER\n")
    of.write(e)
if e in b:
    of.write("TER\n")
1
2
TER
3
4
7

它假定列表a的元素可以位于列表b中的任何位置。
还请注意,它不标记序列的开始。。。只有它们的末端。

您能提供两个列表和预期输出的示例吗?就在这里。此时,输出文件与填充文件相同。输出应该添加TER记录,但在其他方面看起来是一样的。事实上,我不理解你的例子。原子线12在参考文件和内嵌中完全相同。为什么TER在这行前面?对不起,这只是一个例子。在现实生活中,在res编号之后,它们会有所不同。如何将其打印到最后一个匹配的e下面的输出文件中?res是384,文件中有许多384。我只希望它打印后的最后一个(当下一个分辨率将不是384)。如果输出是你想要的。把打印的内容换成。把(e)写在你的代码里,我不明白。你说的“res是384”是什么意思?所以res变量对应于填充和引用示例中的数字384。在您的示例中,您有一个不重复的数字列表。我会这样做:list =(384384384385385…)。哦,我把数字作为一个例子,我假设你会考虑完整行作为元素。