我正在努力理解一个用于解决DNA序列中的丛集发现的简短代码。问题是
给定整数L和t,如果有长度为L的基因组间隔,则字符串模式在(较大)字符串基因组中形成(L,t)-clump,其中模式至少出现t次。 例如,TGCA在以下基因组中形成(25,3)-clump:
gatcagcataagggtcccTGCAaTGCAtgacaagccTGCAgttgttttac。 丛集发现问题 查找在字符串中形成丛集的模式。 给定:一个字符串基因组,和整数k,L,和t。 返回:基因组中所有不同的k-mers形成(L,t)-clumps .
守则如下:
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)什么是外观?这是k-mer团块的起始位置吗?
发布于 2016-01-28 18:10:43
defaultdict是一个Python,如果您请求一个不在字典中的键,它只返回一个“默认”对象。在这种情况下,默认项是一个列表。以下是defaultdict的文档
似乎lookup[seg]返回段seg的位置的列表,如果它们在被解析的部分的L距离内。因此,返回到lookup[seg]的对象是一个进入DNA序列的索引列表。
发布于 2016-01-28 18:11:14
1)使用defaultdict的目的是什么?
defaultdict(list)允许您使用lookup[seg]访问密钥,并“神奇地”找到一个就绪列表。如果密钥(seg)已经在那里,那么您就会得到它。否则,你会得到一个空的列表。对于普通字典,第二个是错误。
(2)什么是看上去?
只要它们足够接近,就会列出序列中的位置。
https://stackoverflow.com/questions/35068664
复制相似问题