Поиск строки, допускающей одно несоответствие в любом месте строки
Я работаю с последовательностями ДНК длиной 25 (см. Примеры ниже). У меня есть список из 230 000, и мне нужно искать каждую последовательность во всем геноме (токсоплазма, паразит gondii). Я не уверен, насколько велик геном, но намного длиннее, чем 230000 последовательностей.
Мне нужно искать каждую из моих последовательностей по 25 символов, например (AGCCTCCCATGATTGAACAGATCAT).
Геном отформатирован в виде непрерывной строки, то есть (CATGGGAGGCTTGCGGAGCCTGAGGGCGGAGCCTGAGGTGGGAGGCTTGCGGAGTGCGGAGCCTGAGCCTGAGGGCGGAGCCTGAGGTGGGAGGCTT ....)
Мне все равно, где и сколько раз он найден, только вне зависимости от того, есть он или нет.
Это просто, я думаю -
str.find(AGCCTCCCATGATTGAACAGATCAT)
Но мне также нужно найти точное совпадение, определенное как неправильное (несоответствующее) в любом месте, но только в одном месте, и записать местоположение в последовательности. Я не уверен, как это сделать. Единственное, о чем я могу думать, это использовать подстановочный знак и выполнять поиск с подстановочным знаком в каждой позиции. То есть, поиск 25 раз.
Например,
AGCCTCCCATGATTGAACAGATCAT
AGCCTCCCATGATAGAACAGATCAT
Близкий матч с несовпадением в позиции 13.
Скорость не является большой проблемой, потому что я делаю это только 3 раза, хотя было бы неплохо, если бы она была быстрой.
Существуют программы, которые делают это - находят совпадения и частичные совпадения - но я ищу тип частичного совпадения, который нельзя обнаружить в этих приложениях.
Вот аналогичный пост для Perl, хотя они сравнивают только последовательности и не ищут непрерывную строку: