我想编写一个脚本,可以使用3阅读框来检测特定的模式,然后从该序列,去3的倍数找到另一种模式
sequence = 'TCATGAGGCTTTGGTAAATAT'
我需要它:
...以3阅读框扫描直到它找到一个所希望的图案(即,“ATG”)
......标记,其中所述第一图案(“ATG”)在原始序列开始的位置,并在那里的第二图案开始(“TAA”)的位置。 在这种情况下,这将是关于“ATG”和15关于“TAA”位置3。
...创建与每个随后的第一图案三重态的列表,直到它到达第二图案“TAA”(即,“ATG”,“AGG”,“CTT”,TGG”,‘TAA’)
如何构建一个阅读框架中套3读它? 我知道,一旦我找到一个办法让阅读我可以创建一个if语句说
reading_frame=[]
for frame in sequence:
if k == 'ATG':
reading_frame.append(k)
第一我需要的阅读框
sequence = 'TCATGAGGCTTTGGTAAATAT'
frame1 = sequence.find('ATG')
my_list = []
for codon in range(len(sequence)):
next_codon = sequence[frame1:frame1+3]
my_list.append(next_codon)
frame1 +=3
if next_codon == 'TAA':
break
print my_list
[ 'ATG', 'AGG', 'CTT', 'TGG', 'TAA']
你可以通过分解你的启动sequence
为一系列3元帧
sequence = 'TCATGAGGCTTTGGTAAATAT'
frames = [sequence[i:i+3] for i in range(0,len(sequence),3)]
print "Frames:",frames
frames_before_ATG,frames_after_ATG = frames[:frames.index("ATG")],frames[frames.index("ATG")+1:]
然后迭代的frames
列表,直到找到第一个图案。
为了找到的第一个位置ATG
的sequence
,越容易是目前为止:
>>> sequence.find('ATG')
在你的榜样,给出2
,图案位置的索引。 然后,就找那个位置之后的第二个模式:
>>> idx_1 = sequence.find('ATG')
>>> idx_2 = sequence[idx_1:].find('TTA')
(该sequence[idx_1:]
返回的元素sequence
位置之后idx_1
)。
请记住, idx_2
被抵消idx_1
(即,模式2的原始列表的实际位置是idx_2+idx_1
。需要注意的是,如果一个模式无法找到,该.find
方法将返回-1。你可能想添加一些测试来处理这种情况。
一旦你发现了两种模式,你可以构造作为中介的名单:
>>> subsequence = sequence[idx_1:idx_2+idx_1]
>>> [subsequence[i:i+3] for i in range(0, len(subsequence), 3)]
你可以很容易地遍历下面这个例子的模式列表。
您可能需要检查是否idx_1%3 == 0
,即如果idx_1
为三(假设第一帧开始于0)的一个倍数。 如果没有,至少你知道你的序列的开始将被丢弃。