[英]Clump Finding in DNA sequence
我正在尝试理解一个简短的代码,用于解决DNA序列中的团簇发现问题。 问题是
给定整数L和t,如果存在一个长度为L的基因组间隔,其中Pattern出现至少t次,则字符串Pattern在(更大的)字符串Genome中形成一个(L,t)-簇。
例如,TGCA在以下基因组中形成(25,3)-团块:
gatcagcataagggtcccTGCAaTGCAtgacaagccTGCAgttgttttac
。团发现问题
查找在字符串中形成团块的模式。
给定:字符串Genome,整数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)什么是查找[段]? 它是k-mer团簇的起始位置吗?
defaultdict
是一个Python对象,如果您请求不在字典中的键,则仅返回“默认”对象。 在这种情况下,默认项是列表。 这是defaultdict的文档
如果lookup[seg]
位于要解析的片段部分的L
距离之内,则好像lookup[seg]
返回了片段seg
的位置列表。 因此, lookup[seg]
的返回对象是DNA序列的索引列表。
1)使用defaultdict
的目的是什么?
defaultdict(list)
允许您使用lookup[seg]
访问键,并“神奇地”在其中找到准备好的列表。 如果键( seg
)已经存在,那您将得到。 否则,您将获得一个空列表。 对于普通字典,第二个字典是错误的。
(2)什么是查找[段]?
只要位置足够接近,它就是序列中的位置列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.