2016-03-01 4 views
1

Я пытаюсь найти способ вычисления/определения ближайшего соответствия строк из списка строк.Вычисление ближайшего совпадения строк из списка строк

Вот строки, которые я хочу, чтобы найти наиболее близкое к: CTGGAG

Из списка строк:

matchlist = ['ACTGGA', 'CTGGAG', 'CTGGAA', 'CTGGTG', 'ACCGGT'] 

Я попытался с помощью SequenceMatcher из difflib:

for t in match: 
    assignseqmatch = SequenceMatcher(None, CTGGAG, t) 
    ratio = assignseqmatch.ratio() 
    seqratiomatchlist.append(ratio) 
    for r, s in zip(seqratiomatchlist, neutralhex): 
     neutralmatchscores[r].append(s) 

Однако, когда я использую этот метод, первые четыре значения в списке, как сообщается, имеют одинаковое соотношение (0.833333), когда thi rd и четвертое значения в списке должны иметь самый высокий коэффициент, так как существует только одна буква разницы между CTGGAG, CTGGAA и CTGGTG. Я просто хочу рассчитать, сколько буквенных изменений существует между двумя строками. Это возможно?

+0

Вы можете использовать Левенштейна между двумя строками (т.е. расстояние редактирования, сколько редактирует сделать вас нужно сделать, чтобы вы соответствовали двум строкам). Есть несколько пакетов python, которые уже реализовали это. Также его довольно легко реализовать. И это позволяет сравнить две строки неравной длины. –

ответ

1

Чтобы найти число буквенных изменений между двумя строками одинаковой длины, x и y, сделайте следующее: расстояние

numChanges = sum(i != j for i, j in zip(x, y)) 
+0

Ваше согласие с моим ответом просто сделало мое :) – zondo