簡體   English   中英

比較兩個列表時如何在特定字符串之后打印內容?

[英]How to print something after a particular string when comparing two lists?

我正在嘗試比較列表中的字符串,如果該字符串也在另一個列表中,我想在新行上打印一些內容。 不幸的是,兩個列表中都有多個相同的變量(數量可能有所不同),我想在最后一個變量的下面打印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)

infile示例:

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  

reference示例:

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
TER

假定列表a的元素可以在列表b中的任何位置。 還要注意,它不會標記序列的開始,而只是標記它們的結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM