首页 > 解决方案 > 仅遍历列表列表中的第一个列表

问题描述

def translateStrand1(dnaStrand):
    protein = []
    proteinList = []
    start = dnaStrand.find('ATG')
    end = len(dnaStrand)
    totalLength = dnaStrand[start:end]

    remove = totalLength.split('TAG')
    for str in remove:
        split_str = [str[i:i+3] for i in range(0, len(str), 3)]
        protein.append(split_str)
        print(protein)
        for list in protein:
            for i in list:
                protein = (aminoAcid(i))
                proteinList.append(protein)
            return proteinList

当前结果:

>>> translateStrand1('ABCATGTATGCCTAGATGCTGCGCTAGATGGTTGCA')
[['ATG', 'TAT', 'GCC']]
['Met', 'Tyr', 'Ala']

给定字符串的必需结果:

>>> translateStrand1('ABCATGTATGCCTAGATGCTGCGCTAGATGGTTGCA')
[['Met, 'Tyr', 'Ala'], ['Met', 'Lev', 'Arg'], ['Met', 'Val', 'Ala']]

看起来只有蛋白质中的第一个列表被迭代而不是所有列表。此外,我只需要相应的缩写,而不是输出中字符串中的字母。

标签: pythonpython-3.x

解决方案


首先,您应该避免使用变量名strand list,因为它们是 python 中的特殊“关键字”。它可能会给你带来问题。

其次,您的主要问题是返回结果的位置。您已将 return 函数放在 for 循环中,这就是为什么您没有获得完整列表的原因。这应该放在你的 for 循环之外,如下所示:

def translateStrand1(dnaStrand):
    protein = []
    proteinList = []
    start = dnaStrand.find('ATG')
    end = len(dnaStrand)
    totalLength = dnaStrand[start:end]

    remove = totalLength.split('TAG')
    for sequence in remove:
        split_str = [sequence[i:i+3] for i in range(0, len(sequence), 3)]
        proteins_in_seq = []
        protein.append(split_str)
        for i in split_str:
            amino_acid = aminoAcid(i)
            proteins_in_seq.append(amino_acid)
        proteinList.append(proteins_in_seq)
    return proteinList

python中的缩进很重要,它是用来嵌套命令的。

最后,您将获得碱基对和氨基酸缩写,因为您使用的是 print 语句print(protein)。如果你不想要这个,那么你应该删除这一行。

PS您还将protein变量名称用于两个不同的目的。您可能想要检查这是否真的是您想要的行为。


推荐阅读