* Это краткое введение, конкретный вопрос выделен жирным шрифтом в последнем абзаце.
Я пытаюсь создать все строки с заданным расстоянием Хэмминга, чтобы эффективно решать биоинформационные задания.
Идея заключается в том, что задана строка (например, "ACGTTGCATGTCGCATGATGCATGAGAGCT" ), длина слова для поиска (т.е. 4) и допустимые несоответствия при поиске этого слова в строке (то есть 1), возвращают наиболее частые слова или "мутированные" слова.
Чтобы быть ясным, слово длиной 4 из данной строки может быть этим (между '[]'):
[ACGT]TGCATGTCGCATGATGCATGAGAGCT #ACGT
это
A[CGTT]GCATGTCGCATGATGCATGAGAGCT #CGTT
или
ACGTTGCATGTCGCATGATGCATGAG[AGCT] #AGCT
То, что я сделал (и его очень неэффективно, и его очень медленно, когда слова должны иметь 10 символов), генерирует все возможные слова с заданным расстоянием:
itertools.imap(''.join, itertools.product('ATCG', repeat=wordSize))
а затем выполните поиск и сравнение каждого слова в данной строке, если сгенерированные слова (или его мутация) появляются в цикле:
wordFromString = givenString[i:i+wordSize]
mismatches = sum(ch1 != ch2 for ch1, ch2 in zip(wordFromString, generatedWord))
if mismatches <= d:
#count that generated word in a list for future use
#(only need the most repeated)
Я хочу сделать это, вместо того чтобы генерировать ВСЕ возможные слова, генерировать только мутации слов, которые появляются в данной строке с заданным числом несоответствий, другими словами, , учитывая расстояние Хэмминга и word, верните все возможные мутированные слова с этим (или меньшим) расстоянием, а затем используйте их для поиска в данной строке.
Надеюсь, я поняла. Спасибо.