【问题标题】:modifying list of characters in python修改python中的字符列表
【发布时间】:2013-04-12 05:00:06
【问题描述】:

我有一个用于创建 FASTA 序列文件的程序。

input=['ARIMALTHNAEYSDSFTAL','ARIMFLTHNFEYSESFTAL','AHIMNPTENAEYHESFTAL','AHIMNPTENTEYWDSFTAL','AHIMNDTHNFEYHDSFTAL','AHIMNDTNNTEYWESFTAL','ARIMFDTENAEYHDSFTAL','AHIMADTNNTEYWDSFTAL','ARIMFLTENTEYHESFTAL']

l = len(input[0])

my_residues = [set() for _ in xrange(l)]
for h in input: 
    for i, x in enumerate(h): 
        my_residues[i].add(x)

my_residues = [list(x) for x in my_residues]
print my_residues

这将给出这样的输出

[['A'], ['H', 'R'], ['I'], ['M'], ['A', 'N', 'F'], ['P', 'L', 'D'], ['T'], ['H', 'E', 'N'], ['N'], ['A', 'T', 'F'], ['E'], ['Y'], ['H', 'S', 'W'], ['E', 'D'], ['S'], ['F'], ['T'], ['A'], ['L']]

但我希望以这样一种方式输出,即如果包含多个残基,则所有氨基酸残基都在一组中。 所以输出应该是这样的:

[['A'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'], ['I'], ['M'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'], ['T'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'],......  ['F'], ['T'], ['A'], ['L']]

【问题讨论】:

    标签: python list set


    【解决方案1】:

    您需要在构建my_residues 时跟踪所有氨基酸残基,然后当您再次循环创建列表时,如果长度不是 1,则将集合替换为所有可能的氨基酸残基列表:

    import string
    all_residues = sorted(set(string.ascii_uppercase) - set('BJOUXZ'))
    
    my_residues=[set() for _ in xrange(len(input[0]))]
    for h in input: 
        for i, x in enumerate(h): 
            my_residues[i].add(x)
    
    my_residues=[list(x) if len(x) == 1 else all_residues for x in my_residues]
    print my_residues
    

    打印出来:

    [['A'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['I'], ['M'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['T'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['N'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['E'], ['Y'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['S'], ['F'], ['T'], ['A'], ['L']]
    

    【讨论】:

    • 它没有给出完整的残基
    • @user2151414:那你得告诉我如何获得完整的残基;例如,您的输入样本不包含 C。它只是一个我们可以硬编码的列表吗?
    • 输入中将不存在许多残基,但在输出中,如果该位置是变量 one,则每个残基都应该存在
    • 我的生物信息学知识为 0。在脚本开头定义all_residues = ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'] 是否足够?
    • 对不起,是的,除了“BJOUXZ”之外的所有字母都是氨基酸残基
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 2016-05-04
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多