python - 仅遍历列表列表中的第一个列表
问题描述
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']]
看起来只有蛋白质中的第一个列表被迭代而不是所有列表。此外,我只需要相应的缩写,而不是输出中字符串中的字母。
解决方案
首先,您应该避免使用变量名str
and 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
变量名称用于两个不同的目的。您可能想要检查这是否真的是您想要的行为。
推荐阅读
- c# - 匿名方法应按条件返回字符串
- go - 仅知道接口时克隆结构
- java - JBOSS 服务器抛出异常 - 无法转换为 org.apache.xml.dtm.DTMManager
- uwp - UserControl 中的绑定问题
- c++ - 最后的每一个组合都是双重基本 C++
- mysql - 为什么 innodb 缓冲池内存在命令“优化表”后会增长?
- node.js - 我无法运行我的节点服务器 Babel 编译错误
- php - 如何在正则表达式中修复此错误“未定义的偏移量:”?
- java - Java中只需要为Integer.valueOf()写Junit
- python - 是否有任何类似 Google Apps 脚本的解决方案来运行 Python?