Я работал над программой, которая требует подсчета подстрок (до 4000 подстрок из 2-6 символов, расположенных в списке) внутри основной строки (~ 400 000 символов). Я понимаю, что это похоже на вопрос, заданный на Подсчет подстрок в строке , однако это решение не работает для меня. Поскольку мои подстроки представляют собой последовательности ДНК, многие из моих подстрок являются повторяющимися экземплярами одного символа (например, «AA»); следовательно, «AAA» будет интерпретироваться как один экземпляр «AA», а не как два случая, если я разделю строку на «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