我正在尝试理解用于解决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丛的起始位置吗?
答案 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]?
这是序列中的位置列表,只要它们足够接近。