2016-06-23 2 views
2

У меня есть списокудаления строки из списка питона на основе расстояния Хемминга

l = ['ATCGGG','CGGGAT,CGGGAA','ATGGCC,CTCCCT,CTCCGT,TTAAGG'] 

Я хочу, чтобы вычислить расстояние Хемминга между строками в каждом элементе списка и поместите строки, которые меньше или равны расстояние Хэмминга 1 другого. Пример ожидаемый выход

l = ['ATCGGG','CGGGAT','ATGGCC,CTCCCT,TTAAGG'] 

Я знаю, как вычислить расстояние Хэмминга между двумя строками:

def hamming(s1, s2): 
    if len(s1) != len(s2): 
     raise ValueError("Undefined for sequences of unequal length") 
    return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2)) 

Я не в состоянии правильно итерацию по элементам списка. Пожалуйста, дайте мне знать о хорошем пути?

ответ

2

Это производит именно выход вы сказали, что вы хотели:

result = [] 
for group in l: 
    pieces = group.split(",") 
    thischunk = [] 
    for piece in pieces: 
     if all(hamming(piece, base) > 1 for base in thischunk): 
      thischunk.append(piece) 
    result.append(",".join(thischunk)) 
print(result) 

Выход:

['ATCGGG', 'CGGGAT', 'ATGGCC,CTCCCT,TTAAGG'] 
Смежные вопросы