【发布时间】:2012-09-21 23:01:43
【问题描述】:
我将发布一个关于我之前关于阅读框架的问题的后续问题。
sequence = 'AAATGAAATAAGGATGGGGTAGTATGATGTGTTT'
我最终是在寻找一个特定的模式“ATG”,我想扫描输入序列直到找到它。一旦找到它,我希望它继续使用 3 的阅读框,直到它找到另一个序列“TAA”或“TAG”或“TGT”,然后继续扫描,直到找到下一个带有下游“TAA”的“ATG” ' 或 'TAG' 或 'TGT'
codon_list = ['ATG','AAA','TAA'],['ATG','GGG','TAG'],['ATG','ATG','TGT']
我正在尝试这个
start_frame = sequence.find('ATG')
但它只会让我第一次出现“ATG”。 (即'2')
只是为了我写的第一个密码子列表
for codon in range(len(sequence)):
next_codon = fdna[start_frame:start_frame + 3]
codon_list.append(next_codon)
start_frame = start_frame + 3
if next_codon == 'TAA':
break
if next_codon == 'TAG':
break
elif next_codon=='TGT':
break
print codon_list
>>> ['ATG','AAA','TAA']
它只适用于“ATG”的第一次出现。
下一部分是我要为每个密码子 (0,1,2,3,...) 创建一个名称的地方,我想我想出了这部分:
indx = range(0,len(codon_list))
indx_codon = dict(zip(indx,codon_list)
indx_codon = {0:['ATG','AAA','TAA'],1:['ATG','GGG','TAG'],2:['ATG','ATG','TGT']}
codon_start = ['2','13','23']
codon_end = ['8','21','31']
codon_positions = []
for p,q in zip(codon_start,codon_end):
codon_positions.append(str(p)+':'+str(q))
print codon_positions
>>> ['2:8', '13:21', '23:31']
所以我最大的问题是 .find() 函数仅适用于第一次出现,如果在 ' 之前有 'TAA' 或 'TAG' 或 'TGT' ATG'('ATG'应该是3的阅读框开始的那个)
如何创建符合这些条件的多个序列的列表(即将序列转换为 codon_list)?
【问题讨论】:
-
find采用可选的start索引,因此您可以编写s.find('ATG', i)以在索引i处开始搜索