用python打印列表的各个元素

用python打印列表的各个元素,python,bioinformatics,biopython,Python,Bioinformatics,Biopython,我从输入文件中提取了以下内容: Query_7736 1624 SDLA**VY*EMQALRIKPSNVTFSILIKLYGRNKQVSKAIEVLEEMKR*GVQPGMIVYTC 1803 XP_002972017 833 MAEACELMRSLRSLRVSPDTVTFSTLIDGLCKCGQTDEACNVFDDMIAGGYVPNVVTYNV 894 XP_002972017 583 FEQASALFEEMVAKNLQPDVMTFGALIDGLCKAGQVEAARD

我从输入文件中提取了以下内容:

Query_7736    1624  SDLA**VY*EMQALRIKPSNVTFSILIKLYGRNKQVSKAIEVLEEMKR*GVQPGMIVYTC  1803
XP_002972017  833   MAEACELMRSLRSLRVSPDTVTFSTLIDGLCKCGQTDEACNVFDDMIAGGYVPNVVTYNV  894
XP_002972017  583   FEQASALFEEMVAKNLQPDVMTFGALIDGLCKAGQVEAARDILDLMGNLGVPPNVVTYNA  642
XP_002972017  653   IEEACQFLEEMVSSGCVPDSITYGSLVYALCRASRTDDALQLVSELKSFGWDPDTVTYNI  712
XP_002972017  905   MERAHAMIESMVDKGVTPDVITYSVLVDAFCKASHVDEALELLHGMASRGCTPNVVTFNS  964
XP_002972017  940   VDEALELLHGMASRGCTPNVVTFNSIIDGLCKSDQSGEAFQMFDDMTKHGLAPDKITYCT  1000
XP_002970953  380   RELASSVYKTMTSHGCVPDVVTLSTMIDGLSKAGRIGAAVRIFKSMEARGLAPNEVVYSA  447
XP_002970953  458   MDCALEMLAQMKKAFCTPDTITYNILIDGLCKSGDVEAARAFFDEMLEAGCKPDVYTYNI  517
XP_002971975  632   LEEARKILERLERENCKADMFAYRVMMDGLCRTGRMSAALELLEAIKQSGTPPRHDIYVA  692
XP_002971975  527   VDDAERLLEEMVASDCSPDVYTYTSLVDGFCKVGRMVEARRVLKRMAKRGCQPNVVTYTA  586
XP_002971975  387   VRDAQEVFKRMIVRGIEPNVVTYNSLIHGFCMTNGVDSALLLMEEMTATGCLPDIITYNT  446
XP_002971975  317   LDEACKLFEKMRENSCEPDVVTFTALMDGLCKGDRLQEAQQVLETMEDRNCTPNVITYSS  376
XP_002961692  489   VRDALGLLEFMIESGLSPDVITFNSVLDGLCKEQRILDAHNVFKRALERGCRPNVVTYST  548
XP_002961692  873   SEQALELLRAMVADGGSPDACNYMTVMDGLFKAGSPEVAAKLLQEMRSRGHSPDLRTYTI  932
我有一个下面的脚本,它用“Query”搜索每一行,查找一个“*”并打印它下面的列

lines = [line.rstrip() for line in open('infile.txt')]
for line in lines:
    data = line.split()
    sequence = data[2]
    if data[0].startswith("Query_"):
        star_indicies = [i for i,c in enumerate(sequence) if c == '*'] 
    else:
        print list(sequence[star_index] for star_index in star_indicies)
生成的输出如下所示:

['C', 'E', 'R', 'G']
['S', 'A', 'E', 'L']
['C', 'Q', 'E', 'F']
['H', 'A', 'E', 'R']
['L', 'E', 'H', 'H']
['S', 'S', 'K', 'R']
['L', 'E', 'A', 'A']
['R', 'K', 'E', 'S']
['E', 'R', 'E', 'R']
['Q', 'E', 'K', 'T']
['C', 'K', 'E', 'R']
['L', 'G', 'E', 'R']
['L', 'E', 'R', 'R']
['V', 'E', 'D', 'D']
['L', 'G', 'E', 'A']
['C', 'Q', 'S', 'N']
['L', 'E', 'Q', 'A']
如何将每个单独的列输出到新行,例如:

C, S, C, H, L, S, L, R, E, Q, C, L, L, V, L, C, L
E, A, Q, A, E, S, E, K, R, E, K, G, E, E, G, Q, E
R, E, E, E, H, K, A, E, E, K, E, E, R, D, E, S, Q
G, L, F, R, H, R, A, S, R, T, R, R, R, D, A, N, A
我可以轻松地将其转换为字符串,但当我尝试以所需的方式打印时,我失败了,我使用的是:

print ("\n".join(map(str,list(sequence[star_index] for star_index in star_indicies))),

只需用逗号连接上一个列表的每一列

result = list(sequence[star_index] for star_index in star_indices)
for i in range(len(result[0])):
    print(", ".join([l[i] for l in result]))
这是你得到的

In [2]: result = [['C', 'E', 'R', 'G'],
['S', 'A', 'E', 'L'],
['C', 'Q', 'E', 'F'],
['H', 'A', 'E', 'R'],
['L', 'E', 'H', 'H'],
['S', 'S', 'K', 'R'],
['L', 'E', 'A', 'A'],
['R', 'K', 'E', 'S'],
['E', 'R', 'E', 'R'],
['Q', 'E', 'K', 'T'],
['C', 'K', 'E', 'R'],
['L', 'G', 'E', 'R'],
['L', 'E', 'R', 'R'],
['V', 'E', 'D', 'D'],
['L', 'G', 'E', 'A'],
['C', 'Q', 'S', 'N'],
['L', 'E', 'Q', 'A']]

In [3]: for i in range(len(result[0])):
            print(", ".join([l[i] for l in result]))
   ...:     
C, S, C, H, L, S, L, R, E, Q, C, L, L, V, L, C, L
E, A, Q, A, E, S, E, K, R, E, K, G, E, E, G, Q, E
R, E, E, E, H, K, A, E, E, K, E, E, R, D, E, S, Q
G, L, F, R, H, R, A, S, R, T, R, R, R, D, A, N, A
或者,正如其他人所建议的那样:

In [9]: for l in zip(*result):
   ...:     print(", ".join(l))
   ...:     
C, S, C, H, L, S, L, R, E, Q, C, L, L, V, L, C, L
E, A, Q, A, E, S, E, K, R, E, K, G, E, E, G, Q, E
R, E, E, E, H, K, A, E, E, K, E, E, R, D, E, S, Q
G, L, F, R, H, R, A, S, R, T, R, R, R, D, A, N, A
鉴于以下情况

In [7]: list(d2)
Out[7]: 
[['C', 'E', 'R', 'G'],
 ['S', 'A', 'E', 'L'],
 ['C', 'Q', 'E', 'F'],
 ['H', 'A', 'E', 'R'],
 ['L', 'E', 'H', 'H'],
 ['S', 'S', 'K', 'R'],
 ['L', 'E', 'A', 'A'],
 ['R', 'K', 'E', 'S'],
 ['E', 'R', 'E', 'R'],
 ['Q', 'E', 'K', 'T'],
 ['C', 'K', 'E', 'R'],
 ['L', 'G', 'E', 'R'],
 ['L', 'E', 'R', 'R'],
 ['V', 'E', 'D', 'D'],
 ['L', 'G', 'E', 'A'],
 ['C', 'Q', 'S', 'N'],
 ['L', 'E', 'Q', 'A']]
您可以将
zip()
与解包操作符(
*
)一起使用,如下所示:

In [8]: '\n'.join([' '.join(l) for l in zip(*d2)])
Out[8]: 'C S C H L S L R E Q C L L V L C L\nE A Q A E S E K R E K G E E G Q E\nR E E E H K A E E K E E R D E S Q\nG L F R H R A S R T R R R D A N A'

如果每个文件可以有多个“查询”,并且顺序不同:

lines = [line.rstrip().split() for line in open('infile.txt')]

# Load the indexes in one list, the sequences in another
# As shown in http://stackoverflow.com/a/21023591/1688590
indexes, sequences = [], []

for line in lines:
    target = indexes if line[0].startswith("Query_") else sequences
    target.append(line[2])

for pos, char in enumerate(zip(*indexes)):
    # Check if any of the "Query_" sequences has a * in that position
    if "*" in char:
        # Output every char in that position in the other secuences
        print(", ".join([_[pos] for _ in sequences]))

看起来您所需要的只是使用
zip()
,perhaps@ap是的,
zip
*
这是在我的答案中的python解释器中执行代码的输出。不确定括号的来源,您会发现比
范围(len(x))更干净