快速 Python 短 DNA 字符串比较
Fast Python Short DNA String Comparison
我有一个 8bp 的字符串 testStr
ACTGACTG
我想将它与 8bp 字符串的绿色列表进行比较 greenList
。
GGCGCATG
ACTGAAAT
ATGCCCGT
ACTGAGTG
如果 testStr
在 greenList
中任何字符串的汉明距离 1 内(在 <= 1 位置有差异),我希望 for 循环继续。以下是可接受的匹配,因为序列仅在一个位置不同。
ACTGACTG
||||| ||
ACTGAGTG
我第一次尝试这样做的中心是创建一个绿色列表,其中包含 greenList 中字符串的所有可能的汉明距离 1 变化...例如,序列 GGCGCATG
产生以下汉明距离 1 变化。
AGCGCATG
CGCGCATG公司
TGCGCATG
广汽总局
海湾合作委员会
GTCGCATG
GGAGCATG
GGTGCATG
GGGGCATG
GGCACATG
GGCCCATG
GGCTCATG
GGCGAATG
GGCGTATG
GGCGGATG
GGCGCCTG
GGCGCTTG
GGCGCGTG
GGCGCCAG
GGCGCCCG
GGCGCCGG公司
国资委
国资委国资委
GGCGCCTT
如果上述任何序列直接匹配“testStr”,循环将继续。
但必须有更好的方法来做到这一点...我也知道有大量的比对算法可用于 DNA 比对。但是,对于这种简单的情况,我发现的大多数情况似乎都有些矫枉过正。非常感谢任何指导。
您不必生成 green
列表的所有变体。相反,您可以计算输入序列 x
与 green
.
中每个序列之间的实际汉明距离
我正要提供一个将字符串序列编码为整数列表的解决方案但是它可以完美地处理字符串,因为字符串是可迭代的!
因此,我们只需要实现一个汉明距离函数,它会计算两个给定字符串之间不同字符的数量。这将做到:
def hamming(s1, s2):
return sum(c1 != c2 for c1, c2 in zip(s1, s2))
然后我们可以遍历 green
并且只保留距离 x
<= 1
:
的元素
x = 'ACTGACTG'
green = ['GGCGCATG', 'ACTGAAAT', 'ATGCCCGT', 'ACTGAGTG']
res = [s for s in green if hamming(s, x) <= 1]
谢谢@Daniel指正!
我有一个 8bp 的字符串 testStr
ACTGACTG
我想将它与 8bp 字符串的绿色列表进行比较 greenList
。
GGCGCATG
ACTGAAAT
ATGCCCGT
ACTGAGTG
如果 testStr
在 greenList
中任何字符串的汉明距离 1 内(在 <= 1 位置有差异),我希望 for 循环继续。以下是可接受的匹配,因为序列仅在一个位置不同。
ACTGACTG
||||| ||
ACTGAGTG
我第一次尝试这样做的中心是创建一个绿色列表,其中包含 greenList 中字符串的所有可能的汉明距离 1 变化...例如,序列 GGCGCATG
产生以下汉明距离 1 变化。
AGCGCATG CGCGCATG公司 TGCGCATG 广汽总局 海湾合作委员会 GTCGCATG GGAGCATG GGTGCATG GGGGCATG GGCACATG GGCCCATG GGCTCATG GGCGAATG GGCGTATG GGCGGATG GGCGCCTG GGCGCTTG GGCGCGTG GGCGCCAG GGCGCCCG GGCGCCGG公司 国资委 国资委国资委 GGCGCCTT
如果上述任何序列直接匹配“testStr”,循环将继续。
但必须有更好的方法来做到这一点...我也知道有大量的比对算法可用于 DNA 比对。但是,对于这种简单的情况,我发现的大多数情况似乎都有些矫枉过正。非常感谢任何指导。
您不必生成 green
列表的所有变体。相反,您可以计算输入序列 x
与 green
.
我正要提供一个将字符串序列编码为整数列表的解决方案但是它可以完美地处理字符串,因为字符串是可迭代的!
因此,我们只需要实现一个汉明距离函数,它会计算两个给定字符串之间不同字符的数量。这将做到:
def hamming(s1, s2):
return sum(c1 != c2 for c1, c2 in zip(s1, s2))
然后我们可以遍历 green
并且只保留距离 x
<= 1
:
x = 'ACTGACTG'
green = ['GGCGCATG', 'ACTGAAAT', 'ATGCCCGT', 'ACTGAGTG']
res = [s for s in green if hamming(s, x) <= 1]
谢谢@Daniel指正!