2

我正在尝试编写一个脚本,该脚本可以使用 3 的阅读框来检测某个模式,然后从该序列中,以 3 的倍数找到另一个模式

sequence = 'TCATGAGGCTTTGGTAAATAT'

我需要它:

...使用阅读框 3 进行扫描,直到找到所需的模式(即“ATG”)

...标记原始序列中第一个模式('ATG')开始的位置和第二个模式开始的位置('TAA')。在这种情况下, 'ATG' 的位置为 3 , 'TAA' 的位置为 15 。

...创建一个列表,其中每个三元组遵循第一个模式,直到它到达第二个模式“TAA”(即“ATG”、“AGG”、“CTT”、TGG'、“TAA”)

如何构建一个阅读框以 3 组阅读它?我知道一旦我找到了阅读的方法,我可以创建一个 if 语句说

reading_frame=[]

for frame in sequence:
    if k == 'ATG':
        reading_frame.append(k)

首先我需要阅读框架

4

3 回答 3

2

您可以首先将您分解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列表,直到找到第一个模式。

于 2012-09-20T22:19:58.943 回答
1

要找到ATGin的第一个位置sequence,到目前为止更容易:

>>> sequence.find('ATG')

在您的示例中,这给出2了模式位置的索引。然后,只需在该位置之后寻找第二个模式:

>>> idx_1 = sequence.find('ATG')
>>> idx_2 = sequence[idx_1:].find('TTA')

(返回位置后sequence[idx_1:]的元素)sequenceidx_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 开始)。如果不是,至少您知道序列的开头将被丢弃。

于 2012-09-20T22:16:13.770 回答
0
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']

于 2012-09-20T22:42:00.040 回答