我是BioPython的新手,我正在尝试导入fasta / fastq文件并遍历每个序列,同时对每个序列执行一些操作。我知道这似乎是基本的,但我的代码由于某种原因无法正确打印。
from Bio import SeqIO
newfile = open("new.txt", "w")
records = list(SeqIO.parse("rosalind_gc.txt", "fasta"))
i = 0
dna = records[i]
while i <= len(records):
print (dna.name)
i = i + 1
我试图基本遍历记录并打印名称,但是我的代码最终只打印“records [0]”,我希望它打印“records [1-10]”。有人可以解释为什么它最终只打印“记录[0]”?
答案 0 :(得分:1)
您遇到问题的原因在于:
i = 0
dna = records[i]
您的对象'dna'固定为记录的索引0,即记录[0]。由于您没有再次调用它,因此dna将始终固定在该声明上。在while循环中的print语句中,使用以下内容:
while i <= len(records):
print (records[i].name)
i = i + 1
如果您希望将对象dna作为记录条目的副本,则需要将dna重新分配给每个索引,在while循环中进行此操作,如下所示:
while i <= len(records):
dna = records[i]
print (dna.name)
i = i + 1
然而,这不是最有效的方式。最后,为了你学习,比使用i = i + 1的while循环更好的方法是使用for循环,如下所示:
for i in range(0,len(records)):
print (records[i].name)
for循环逐个自动进行迭代。 range()将给出一组从0到记录长度的整数。还有其他方法,但我保持简单。