Python for循环跳过'>'符号fasta格式

时间:2014-12-14 02:58:41

标签: python for-loop fasta

我给出了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循环以某种方式跳过数据列表中包含&​​#39;>'的项目。符号,这就是为什么if语句不会导致中断发生的原因,它打印所有项目时,它应该只打印原始序列和下一行'>'然后for循环应该会中断。我想知道是否有人可以解释为什么for循环忽略数据列表中具有'>'符号。感谢

1 个答案:

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