簡體   English   中英

僅遍歷列表列表中的第一個列表

[英]Only iterating through first list in a list of lists

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']]

看起來只有蛋白質中的第一個列表被迭代而不是所有列表。 此外,我只需要相應的縮寫,而不需要 output 中字符串中的字母。

首先,您應該避免使用變量名strlist ,因為它們是 python 中的特殊“關鍵字”。 它可能會給你帶來問題。

其次,您的主要問題是返回結果的位置。 您已將 return function 放在 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變量名稱用於兩個不同的目的。 您可能想要檢查這是否真的是您想要的行為。

暫無
暫無

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

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