我正在寻找一些代码来返回原始字符串中两个不匹配的所有序列,以便找到与我输入的原始序列相似的蛋白质序列的部分。例如,在LELFLKEF中搜索LKLD应该返回: LELF LKEF LFLK 我已经看过各种python方法来做到这一点,但我似乎无法做任何工作。
Search for string allowing for one mismatch in any location of the string
答案 0 :(得分:1)
一种简单的方法是浏览序列并为查询的每个对齐计算hamming distance' LKLD'到主题序列! LELFLKEF'。在链接的维基百科文章中有汉明距离计算的示例实现。完成后,您的代码将执行以下操作:
# hamming distance
d = lambda s1, s2: sum(e1 != e2 for e1, e2 in zip(s1, s2))
subject = 'LELFLKEF'
query = 'LKLD'
for i in range(len(subject)-len(query)+1):
aligned_subject = subject[i:i+len(query)]
if d(aligned_subject, query) == 2:
print(aligned_subject)
输出:
LELF
LFLK
LKEF
请注意,这是一个天真的解决方案,有足够的优化空间,但它适用于简单的情况和相当小的字符串。生成列表的精简版本:
s='LELFLKEF'
q='LKLD'
d= lambda s1, s2: sum(e1 != e2 for e1, e2 in zip(s1, s2))
[s[i:i+len(q)] for i in range(len(s)-len(q)+1) if d(s[i:i+len(q)],q) == 2]
for
循环遍历两个字符串的所有可能无空位对齐:
0
LELFLKEF
||||
LKLD
1
LELFLKEF
||||
LKLD
2
LELFLKEF
||||
LKLD
3
LELFLKEF
||||
LKLD
4
LELFLKEF
||||
LKLD
alignment of biological sequences的问题也有很多实现,因此您可能还想探索一些处理空位对齐和more complicated modeling of substitutions
之类的更复杂的技术