Этот код должен найти наиболее частые k-мерс (подстроки из k букв) с d несоответствиями в строке (геном). В прошлом мне приходилось искать наиболее частые k-mer без несоответствий, и я стараюсь минимально изменить свой код. Для этого я должен иметь возможность увеличивать значения в словаре, ключ которого отличается от строки, которую я передаю. Это возможно? Ниже мой код. Есть ли способ сделать то, что я написал в комментарии? HammingDistance()
просто вычисляет количество различий между двумя строками.
import operator
def MostFrequentKmer (Text, k, d):
kmerDict = {}
freqKmers = list()
for i in range (0, len(Text)-k+1):
kmer = Text[i:i+k]
if kmer in kmerDict:
kmerDict[kmer] += 1
#elif a key exists for which HammingDistance(key, kmer) <= d, then increment the value associated with that key
else:
kmerDict[kmer] = 1
maxVal = max(zip(kmerDict.values()))[0]
for k, v in kmerDict.items():
if v == maxVal:
freqKmers.append(k)
print(sorted(freqKmers))
def HammingDistance (str1, str2):
hamDis = 0
for i in range(0, len(str1)):
if str1[i] != str2[i]:
hamDis += 1
return hamDis
Пример ввода-вывода:
Input- ("ACGTTGCATGTCGCATGATGCATGAGAGCT", 4, 1)
Output- ["ATG C "," ATGT "," GATG "]