0

我正在寻找一种方法来查找 python 中两个字符串之间的不匹配总数。我的输入是一个看起来像这样的列表

['sequence=AGATGG', 'sequence=AGCTAG', 'sequence=TGCTAG',
 'sequence=AGGTAG', 'sequence=AGCTAG', 'sequence=AGAGAG']

对于每个字符串,我想看看它与序列有多少不同"sequence=AGATAA"。因此,如果输入[0]来自上面的列表,则输出将如下所示:

sequence=AGATGG, 2

我不知道是否将每个字母拆分为单独的列表,或者我是否应该尝试以某种方式比较整个字符串。任何帮助都是有用的,谢谢

4

3 回答 3

5

sum您可以使用和轻松计算两个字符串之间的成对不匹配总数zip

>>> s1='AGATGG'
>>> s2='AGATAA'
>>> sum(c1!=c2 for c1,c2 in zip(s1,s2))
2

如果您必须处理大小不同的字符串,您可能希望更喜欢from itertools import zip_longest而不是zip

于 2014-11-24T16:32:36.007 回答
2

首先,我认为你最安全的赌注是使用 Levenshtein 距离和一些图书馆。但由于您使用 Biopython 进行标记,您可以使用pairwise

  1. 首先你想摆脱“sequence=”。您可以切片每个字符串或

    seqs = [x.split("=")[1] for x in ['sequence=AGATGG',
                                      'sequence=AGCTAG',
                                      'sequence=TGCTAG',
                                      'sequence=AGGTAG',
                                      'sequence=AGCTAG',
                                      'sequence=AGAGAG']]
    
  2. 现在定义参考序列:

    ref_seq = "AGATAA"
    
  3. 并使用pairwise您可以计算对齐方式:

    from Bio import pairwise2
    
    for seq in seqs:
        print pairwise2.align.globalxx(ref_seq, seq)
    

我使用pairwise2.align.globalxx的是不带参数的对齐方式。其他函数接受不同的匹配值和间隙值。在http://biopython.org/DIST/docs/api/Bio.pairwise2-module.html检查它们。

于 2014-11-24T18:19:17.310 回答
1

请参阅 Levenshtein 距离:http ://en.wikipedia.org/wiki/Levenshtein_distance 。

您会发现大量有效实现此算法的 python 库。

我认为比较此类基因序列更合适(因为它也可以很好地处理插入和删除)。

于 2014-11-24T16:33:37.763 回答