Приблизительное соответствие шаблону?

#python

#python

Вопрос:

Я пытаюсь написать код для приблизительного сопоставления с образцом, как показано ниже:

 def HammingDistance(p, q):
    d = 0
    for p, q in zip(p, q): # your code here
        if p!= q:
            d  = 1
    return d
Pattern = "ATTCTGGA"
Text = "CGCCCGAATCCAGAACGCATTCCCATATTTCGGGACCACTGGCCTCCACGGTACGGACGTCAATCAAAT"
d = 3
def ApproximatePatternMatching(Pattern, Text, d):
    positions = [] # initializing list of positions
    for i in range(len(Text) - len(Pattern) 1):
        if Pattern == Text[i:i len(Pattern)]:
            positions.append(i)# your code here
    return positions
print (ApproximatePatternMatching(Pattern, Text, d))
  

Я продолжаю получать следующую ошибку:
Неудачный тест # 3. Возможно, вы не учитываете шаблоны, начинающиеся с первого индекса текста.

Тестовый набор данных:

 GAGCGCTGG
GAGCGCTGGGTTAACTCGCTACTTCCCGACGAGCGCTGTGGCGCAAATTGGCGATGAAACTGCAGAGAGAACTGGTCATCCAACTGAATTCTCCCCGCTATCGCATTTTGATGCGCGCCGCGTCGATT
2
  

Ваш вывод:

 ['[]', '0']
  

Правильный вывод:

 ['0', '30', '66']
  

Не могу понять, что я делаю не так, поскольку я пытаюсь изучить python, поэтому не имею ни малейшего представления о программировании. Нужна помощь?

Комментарии:

1. Исправьте отступ кода, пожалуйста.

2. Какова цель HammingDistance() функции? Похоже, вы нигде его не используете.

3. Отступы в моем коде правильные, когда я использую его на python. Здесь я забыл это исправить. Есть ли какие-либо другие ошибки в коде?

Ответ №1:

Я не уверен, почему вы получаете пустой список в качестве одного из своих выходных данных — когда я запускаю ваш код выше, я получаю только [0] в качестве вывода.

В частности, ваш код в настоящее время проверяет только точное соответствие символьной подстроки, без использования определения расстояния Хэмминга, которое вы также включили.

Следующее должно вернуть ожидаемый результат:

 Pattern = "GAGCGCTGG"
Text = "GAGCGCTGGGTTAACTCGCTACTTCCCGACGAGCGCTGTGGCGCAAATTGGCGATGAAACTGCAGAGAGAACTGGTCATCCAACTGAATTCTCCCCGCTATCGCATTTTGATGCGCGCCGCGTCGATT"
d = 3

def HammingDistance(p, q):
    d = 0
    for p, q in zip(p, q): # your code here
        if p!= q:
            d  = 1
    return d

def ApproximatePatternMatching(Pattern, Text, d):
    positions = [] # initializing list of positions
    for i in range(len(Text) - len(Pattern) 1):
        # and using distance < d, rather than exact matching
        if HammingDistance(Pattern, Text[i:i len(Pattern)]) < d:
            positions.append(i)
    return positions

print (ApproximatePatternMatching(Pattern, Text, d))
  

Ответ №2:

 def ApproximatePatternMatching(Pattern, Text, d):
    positions = [] 


    for i in range(len(Text)-len(Pattern) 1):
        x = Text[i:i len(Pattern) 1]
        if x != Pattern:
            y = HammingDistance(Pattern,x)
            if y <= d:
                positions.append(i)
    return positions    




def HammingDistance(p, q):


   count = 0

   for i in range(len(p)):
       x = p[i]
       y = q[i]
       if x != y:
           count = count   1
   return count             
  

Комментарии:

1. @Azia ваш код проверяет, равно ли окно k-mer шаблону, на самом деле требуется приблизительное соответствие, а не точное соответствие и установка для него значения с помощью функции расстояния Хэмминга. и если эта vale меньше или равна p, мы должны перечислить местоположения..