【发布时间】:2019-06-17 13:15:40
【问题描述】:
我一直在研究一个程序,该程序需要计算主字符串(约 400,000 个字符)中的子字符串(列表中最多 4000 个 2-6 个字符的子字符串)。我知道这类似于Counting substrings in a string 提出的问题,但是,这个解决方案对我不起作用。由于我的子字符串是 DNA 序列,我的许多子字符串都是单个字符的重复实例(例如“AA”);因此,如果我将字符串按“AA”拆分,“AAA”将被解释为“AA”的单个实例,而不是两个实例。我当前的解决方案是使用嵌套循环,但我希望有一种更快的方法,因为这段代码需要 5 分钟以上的时间来处理单个主字符串。提前致谢!
def getKmers(self, kmer):
self.kmer_dict = {}
kmer_tuples = list(product(['A', 'C', 'G', 'T'], repeat = kmer))
kmer_list = []
for x in range(len(kmer_tuples)):
new_kmer = ''
for y in range(kmer):
new_kmer += kmer_tuples[x][y]
kmer_list.append(new_kmer)
for x in range(len(kmer_list)):
self.kmer_dict[kmer_list[x]] = 0
for x in range(len(self.sequence)-kmer):
for substr in kmer_list:
if self.sequence[x:x+kmer] == substr:
self.kmer_dict[substr] += 1
break
return self.kmer_dict
【问题讨论】:
-
你试过 string.count() 吗?它返回子字符串的(非重叠)出现次数。
标签: python string performance bioinformatics biopython