我正在尝试生成所有与给定的汉明距离相同的字符串,以高效地解决生物信息学作业。
具体思路是,给定一个字符串(例如“ACGTTGCATGTCGCATGATGCATGAGAGCT”),要搜索的单词长度(例如4)以及在搜索该单词时允许的不匹配数(例如1),返回最常见的单词或“突变”单词。
明确一下,在给定字符串中,长度为4的单词可以是以下格式之一(用方括号'[]'表示):
请翻译以上内容
[ACGT]TGCATGTCGCATGATGCATGAGAGCT #ACGT
这个
A[CGTT]GCATGTCGCATGATGCATGAGAGCT #CGTT
或者这个
ACGTTGCATGTCGCATGATGCATGAG[AGCT] #AGCT
我所做的事情是(这个过程非常低效,当需要生成10个字符的单词时速度会变得很慢),生成所有与给定距离相同的可能单词:
itertools.imap(''.join, itertools.product('ATCG', repeat=wordSize))
然后搜索和比较给定字符串中的每个单词,如果生成的单词(或其变异体)出现在循环中:
wordFromString = givenString[i:i+wordSize]
mismatches = sum(ch1 != ch2 for ch1, ch2 in zip(wordFromString, generatedWord))
if mismatches <= d:
#count that generated word in a list for future use
#(only need the most repeated)
我想做的是,不是生成所有可能的单词,而是仅生成给定字符串中出现的单词的变异体,其具有给定数量的不匹配项,换句话说,给定一个海明距离和一个单词,返回所有可能的变异单词以及这个距离(或更少),然后将它们用于在给定的字符串中搜索。
希望我表述清楚了。谢谢。