我给出了fasta格式的原始dna序列,然后是几个代表内含子的dna序列。我试图区分原始序列,然后将内含子存储在列表中。
第一部分只是尝试将原始dna序列存储在一个字符串中。
data = """>Rosalind_10
ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGGTCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG
>Rosalind_12
ATCGGTCGAA
>Rosalind_15
ATCGGTCGAGCGTGT"""
data = data.split()
original = ""
print(data)
data.pop(0)
for x in range(len(data)):
print(data[x])
if data[x][0] == '>':
data.pop(x)
break
else:
original += data.pop(x)
print(data)
返回
['>Rosalind_10', 'ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGGTCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG', '>Rosalind_12', 'ATCGGTCGAA', '>Rosalind_15', 'ATCGGTCGAGCGTGT']
按预期方式,但随后的print(data[x])
行返回
ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGGTCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG
ATCGGTCGAA
ATCGGTCGAGCGTGT
然后它抛出一个IndexError。在我看来,for循环以某种方式跳过数据列表中包含'>'的项目。符号,这就是为什么if语句不会导致中断发生的原因,它打印所有项目时,它应该只打印原始序列和下一行'>'然后for循环应该会中断。我想知道是否有人可以解释为什么for循环忽略数据列表中具有'>'符号。感谢
答案 0 :(得分:1)
我认为您获得IndexError
和>
的行不会导致中断的原因是您正在修改data
,同时使用pop()
来电。迭代data
的另一种方法是直接执行:
# ...
data = data.split()
data.pop(0) # remove Rosalind_10
original = data.pop(0) # store sequence for Rosalind_10
introns = []
for piece in data:
if piece.startswith('>'):
continue
else:
introns.append(piece)
print('original', original)
print('introns', introns)
打印:
original ATGGTCTACATAGCTGACAAACAGCACGTAGCAATCGGTCGAATCTCGAGAGGCATATGGTCACATGATCGGTCGAGCGTGTTTCAAAGTTTGCGCCTAG
introns ['ATCGGTCGAA', 'ATCGGTCGAGCGTGT']