如何筛选特定碱基顺序的DNA序列并得到它们的位置?

2024-04-25 21:40:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在包含dna代码的列表中找到一个特定的序列(字母已经转换成数字,例如a=1,T=4)。你知道吗

例如:

dna = [1,4,3,2,3,2,1,2,3,2,4,2,1,2,2,2,2,4,1,3,4]

查看前3项(1、4、3),检查项目是否为2、2、4。如果为True,则获取位置(在此0,1,2中为False)。否则,看下面3个项目2,3,2并重复。对dna中的所有位置都这样做[]

我的方法是一个范围内循环,它应该给我dna的位置[15,16,17],但它不会。。。你知道吗


A,G,C,U = 1,2,3,4

dna = []

for _ in range(200): #just generated random 200 numbers as example dna
    code = random.randrange(1,5,1)
    dna.append(code)

l = int(len(dna)/3) #splits search into 3

for i in range(l):
    k = i*3
    if dna[k] == 2:
        if dna[k+1] == 2:
            if dna[k+2] == 4:
                m += 1
                print('GGU at:', dna[i], dna[i+1], dna[k+2], 'found:', m)

我试过许多不同的想法,从类似的问题在软件,但大多数不关心的顺序数字。。。有时伪位置是第2、2、4项,有时找不到任何匹配项。 所有的帮助将不胜感激!你知道吗


Tags: 项目代码infalsetrue列表forif
1条回答
网友
1楼 · 发布于 2024-04-25 21:40:19

使用某种生成器将代码拆分为长度为3的块,并将for循环中的to[2,2,4]进行比较

import random
A,G,C,U = 1,2,3,4

dna = []

for _ in range(200): #just generated random 200 numbers as example DNA
    code = random.randrange(1,5,1)
    dna.append(code)
#function to split list into chunks
def get_chunks(li, cols=2):
    start = 0
    for i in range(cols):
        stop = start + len(li[i::cols])
        yield li[start:stop]
        start = stop
#calculate the required amount of chunks
chunk_amount = int(len(dna)/3)
#create a generator that returns the chunks
chunk_generator = get_chunks(dna, chunk_amount)
#write the chunks to a list named chunks
chunks = []
for x in chunk_generator:
    chunks.append(x)

#iterate the chunks to find a match
j = 0
for i in chunks:
    if i == [2, 2, 4]: #was the sequence found?
        print("2, 2, 4 located at " + str(j) + ", " + str(j+1) + ", " + str(j+2))
    j += 3

这个程序在随机DNA中找到所有[2,2,4]实例。 当然,如果不存在[2,2,4]序列,它不会打印任何内容

相关问题 更多 >