微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据序列与基因组的模式匹配创建生物列表

如何解决根据序列与基因组的模式匹配创建生物列表

我有一个包含两列的数据框,第一列是生物的名称,第二列是一串字母的序列。我正在尝试创建一个算法来查看生物体的序列是否在由字母组成的更大基因组的字符串中。如果它在基因组中,我想将生物体的名称添加到列表中。例如,如果流感在下面的基因组中,我希望将流感添加到列表中。

dict_1={'organisms':['flu','cold','stomach bug'],'seq_list':['HTIDIJEKODKDMRM','AGGTTTEFGFGEERDDTER','EGHDGGEDCGrdSGrdCFD']}
df=pd.DataFrame(dict_1)

     organisms             seq_list
0          flu      HTIDIJEKODKDMRM
1         cold  AGGTTTEFGFGEERDDTER
2  stomach bug  EGHDGGEDCGrdSGrdCFD

genome='TLTPSRDMEDHTIDIJEKODKDMRM'

如果存在 p 是生物体而 t 是基因组的匹配项,则第一个函数会找到匹配项的索引。第二部分是我遇到的问题。我正在尝试使用 for 循环来搜索 df 中的每个条目,但是如果我得到匹配项,我不确定如何引用 df 中的第一列以将名称添加到空列表中。感谢您的帮助!

def naive(p,t):
occurences = []
for i in range(len(t) - len(p) + 1):
    match = True
    for j in range(len(p)):
        if t[i+j] != p[j]:
            match = False
            break
    if match:
        occurences.append(i)
return occurences


Organisms_that_matched = []
for x in df:
   matches=naive(genome,x)
   if len(matches) > 0:
      #add name of organism to Organisms_that_matched list

解决方法

我不确定您是否正在学习在列表中横向和应用自定义逻辑的不同方法,但您可以使用 list comprehensions

import pandas as pd

dict_1 = {
    'organisms': ['flu','cold','stomach bug'],'seq_list':  ['HTIDIJEKODKDMRM','AGGTTTEFGFGEERDDTER','EGHDGGEDCGRDSGRDCFD']}
df = pd.DataFrame(dict_1)
genome = 'TLTPSRDMEDHTIDIJEKODKDMRM'

organisms_that_matched = [dict_1['organisms'][index] for index,x in enumerate(dict_1['seq_list']) if x in genome]

print(organisms_that_matched)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。