【问题标题】:Python for loop skips over '>' symbol fasta formatPython for 循环跳过 '>' 符号 fasta 格式
【发布时间】:2014-12-14 02:58:40
【问题描述】:

我得到了一个 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 循环会忽略数据列表中具有“>”符号的项目。谢谢

【问题讨论】:

  • 所需的输出是否包含所有不以'>'开头的序列的字符串?
  • 我想将第一个序列 rosalind10 存储为字符串 original,然后我想将后续序列存储为字符串列表(内含子)

标签: python for-loop fasta


【解决方案1】:

我认为您同时获得IndexError 和带有> 的行没有导致中断的原因是您在使用pop() 调用迭代它时正在修改data。遍历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']

【讨论】:

  • 谢谢 我不敢相信我没有注意到我在迭代时正在修改它!现在更有意义了
  • 也许piece.startswith('>') 可能比piece[0] == '>' 更清楚?至少它可能是更惯用的python。
猜你喜欢
  • 1970-01-01
  • 2013-02-01
  • 2021-08-23
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多