0
我正試圖解決查找字符串中不匹配最頻繁的k-mers。要求列出如下:查找文本中出現不匹配的最常見k-mers
不匹配的頻繁字問題:查找字符串中不匹配最頻繁的k-mers。
輸入:字符串文本以及整數k和d。 (您可以假定k≤12且d≤3)。
輸出:所有最常見的k-mers,在文本中最多有d個不匹配。
下面是一個例子:
樣品輸入:
ACGTTGCATGTCGCATGATGCATGAGAGCT
樣本輸出:
GATG ATGC ATGT
最簡單和最低效方式是lis ■所有文本k聚體,並計算其彼此間的hamming_difference,並挑選出的圖案,其hamming_difference小於或d相等,下面是我的代碼:
import collections
kmer = 4
in_genome = "ACGTTGCATGTCGCATGATGCATGAGAGCT";
in_mistake = 1;
out_result = [];
mismatch_list = []
def hamming_distance(s1, s2):
# Return the Hamming distance between equal-length sequences
if len(s1) != len(s2):
raise ValueError("Undefined for sequences of unequal length")
else:
return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
for i in xrange(len(in_genome)-kmer + 1):
v = in_genome[i:i + kmer]
out_result.append(v)
for i in xrange(len(out_result) - 1):
for j in xrange(i+1, len(out_result)):
if hamming_distance(str(out_result[i]), str(out_result[j])) <= in_mistake:
mismatch_list.extend([out_result[i], out_result[j]])
mismatch_count = collections.Counter(mismatch_list)
print [key for key,val in mismatch_count.iteritems() if val == max(mismatch_count.values())]
了預期的效果。相反,我得到了' CATG」。有人知道我的代碼有問題嗎?
@ cdlane它看起來像下面, 'GATG' 匹配:AC'GTTG'CATGTCGCATGATGCATGAGAGCT,ACGTTG'CATG'TCGCATGATGCATGAGAGCT,ACGTTGCATGTCG'CATG'ATGCATGAGAGCT,ACGTTGCATGTCGCAT'GATG'CATGAGAGCT ACGTTGCATGTCGCATGATG'CATG'AGAGCT 'ATGC' 匹配:ACG'TTGC 'ATGTCGCATGATGCATGAGAGCT,ACG TTGC'ATGT'CGCATGATGCATGAGAGCT,ACGTTGCATGTCGC'ATGA'TGCATGAGAGCT,ACGTTGCATGTCGCATG'ATGC'ATGAGAGCT ACGTTGCATGTCGCATGATGC'ATGA'GAGCT 'ATGT' 匹配:「ACGT'TGCATGTCGCATGATGCATGAGAGCT,ACGTTGC'ATGT'CGCATGATGCATGAGAGCT,ACGTTGCATGTCGC'ATGA'TGCATGAGAGCT,ACGTTGCATGTCGCATG'ATGC'ATGAGAGCT ACGTTGCATGTCGCATGATGC'ATGA'GAGCT – nosense
@ cdlane'GATG','ATGC','ATGT',所有這些k-mers有5個近似匹配的文本被認爲是'最頻繁的k-mer與d(d = 1)不匹配' – nosense
@nosense我已經添加到我的回答中,修改了您的最後一個頂級'for'循環,我相信解決了這個問題。 – cdlane