2013-11-13 2 views
-5

Пример ввода:как найти максимальное к-Мер в последовательности

ACGTTGCATGTCGCATGATGCATGAGAGCT # это последовательность, в которой мы должны искать

4 # this is the k-mer(integer value) 

Пример вывода:

CATG GCAT

Я не понимаю, как это сделать. Пожалуйста, помогите мне. Заранее спасибо.

+0

Этот вопрос не указан - «k-mer length 4» ничего не сообщает нам о содержании последовательности, которую вы ищете. Пожалуйста, предоставьте дополнительную информацию. – THK

+0

Вы хотите найти подстроки заданной длины, которые встречаются как минимум в два раза? – beroe

+1

Ищете решения для биоинформатики Алгоритмы в Coursera? – chupvl

ответ

1

Если я правильно понимаю ваш вопрос, вот один из способов работы по списку:

s="ACGTTGCATGTCGCATGATGCATGAGAGCT" 
n=4 
k=len(s)-2*n 
klist = [] 
for i in range(k): 
    kmer=s[i:i+n] 
    if not(kmer in klist) and (kmer in s[i+n:]): 
     klist.append(kmer) 
print klist 

Похоже, ваш пример имел несколько kmers, что ожидается, если я не недоразумение:

['TGCA', 'GCAT', 'CATG', 'ATGA'] 

для n = 5:

['TGCAT', 'GCATG', 'CATGA'] 

И даже n = 6:

['TGCATG', 'GCATGA'] 
+0

Почему мы вычитаем «2 * n» вместо «n»? @beroe – jdyg

+0

@ user2094920 - Я не делал много (каких-либо) реальных тестов, но поскольку это * начальная * точка кселера, я думаю, что я пытался обрезать последние 2 * n положения, так что вы начинался бы с 'Y's, но не' X's для n = 4 с 'AAAAAYYYYYXXXX' Вероятно, было бы лучше использовать' - (n + 1) '? – beroe

+0

С другой стороны, '-2 * n' находит два клмера с' s = 'GATGXXXXGATG'' – beroe