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