Clump在DNA序列中发现

时间:2016-01-28 17:58:45

标签: python sequence

我正在尝试理解用于解决DNA序列中的丛发现的简短代码。问题是

  

给定整数L和t,如果存在长度为L的基因组的间隔,则字符串模式在(较大的)字符串基因组中形成(L,t) - 团块,其中Pattern至少出现t次。

     

例如,TGCA在以下基因组中形成(25,3) - 聚集体:gatcagcataagggtcccTGCAaTGCAtgacaagccTGCAgttgttttac

     

丛发现问题

     

找到在字符串中形成团块的图案。

     

给定:字符串基因组,以及整数k,L和t。

     

返回:在基因组中形成(L,t) - 团块的所有不同的k聚体。

代码如下:

from collections import defaultdict

def search(inseq, k, L, t):
    lookup = defaultdict(list)
    result = set()

    for cursor in range(len(inseq) - k + 1):
        seg = inseq[cursor:cursor + k]

        # remove prior positions of the same segment
        # if they are more than L distance far
        while lookup[seg] and cursor + k - lookup[seg][0] > L:
            lookup[seg].pop(0)

        lookup[seg].append(cursor)
        if len(lookup[seg]) == t:
            result.add(seg)

    return result

以下是我的问题,

(1)使用defaultdict而不是dict的目的是什么?

(2)什么是查找[seg]?它是k-mer丛的起始位置吗?

2 个答案:

答案 0 :(得分:1)

defaultdict是一个Python对象,它只返回一个'默认值'对象,如果您请求不在字典中的键。在这种情况下,默认项目是列表。 http://code.tutsplus.com/articles/python-from-scratch-object-oriented-programming--net-21476

好像lookup[seg]返回段seg的位置列表(如果它们在被解析的段的部分的L距离内)。因此,lookup[seg]的返回对象是DNA序列的索引列表。

答案 1 :(得分:1)

1)使用defaultdict的目的是什么?

defaultdict(list)可让您使用lookup[seg]访问密钥,并且"神奇地"找到一个准备好的清单。如果密钥(seg)已经存在,那就是您将获得的密钥。否则,您将获得一个空列表。使用普通字典时,第二个是错误。

(2)什么是查找[seg]?

这是序列中的位置列表,只要它们足够接近。