Так у меня есть две последовательности праймера:найти и удалить общую подстроку с питоном
fiveprime = "GATTCGAAGTCCACTATC" threeprime = "TGAGTAGGACGGCACTATC"
Что мне нужно сделать, когда у меня есть другая последовательность, мне нужно, чтобы проверить, если он содержит часть одного этих праймеров последовательности, и если это необходимо, мне нужно удалить соответствующую часть, оставляя несогласованную часть для дальнейшего анализа.
Например, моя последовательность: CACTATC AAAAAAA имеет часть пятипримаров в нем. Мне нужно найти эту общую подстроку, а затем удалить ее, оставив только AAAAA
.
Проблема, с которой я столкнулся, - это когда у вас есть такая последовательность: CACTATC GAAG, где GAAG также находится в грунтовке, но не является частью последовательности праймеров, он все еще удаляется. Я попытался исправить это, убедившись, что найденная структура находится на левой стороне грунтовки и с threeprimer на правой стороне, так например:
С CACTATC Гаагом у нас есть 2 общие структуры CACTATC и Гааг теперь я могу сравнить CACTATC с конца fiveprime GATTCGAAGTC CACTATC и сказать, что это часть праймера, когда это совпадение, а затем удалить его. Поэтому, когда мы сравниваем GAAG с длиной последнего конца пятипринтера, он даст нам этот GATTCGAAGTCCAC TATC, который не соответствует, поэтому GAAG может продолжаться для дальнейшего анализа.
По какой-то причине мой скрипт ошибочно работает или работает неправильно. Есть ли другие решения этой проблемы или предложения?
def longestSubstringFinder(string1, string2):
answer = ""
len1, len2 = len(string1), len(string2)
for i in range(len1):
match = ""
for j in range(len2):
if i + j < len1 and string1[i + j] == string2[j]:
match += string2[j]
else:
if len(match) > len(answer): answer = match
match = ""
return answer
def get_sequence(test, fiveprime, threeprime):
if test == fiveprime:
pass
elif test == threeprime:
pass
elif test in fiveprime:
pass
elif test in threeprime:
pass
# find out if there is a matching part between the primers and the found
# single stranded region, then calculates what part that is, and removes it
# from the single stranded region
else:
overlap = longestSubstringFinder(fiveprime, test)
l = len(overlap)
if fiveprime[-l:] == test[:l]:
check = test[l:]
else:
check = test
overlap2 = longestSubstringFinder(check, threeprime)
l = len(overlap2)
if threeprime[:l] == check[-l:]:
check2 = check[:-l]
structure.append(check2)
else:
structure.append(check)
return structure
Какова длина строки, которую вы в значительной степени совместимы? –
Вы не указали переменную 'structure' в любом месте, но вы с радостью добавляете ее. –
зависит от ввода строки i, может быть любой длины. Вот почему я проверяю длину найденной общей подстроки. а затем использовать это, чтобы сравнить, если найденная структура является частью праймера. –