2014-11-24 83 views
0

我正在尋找一種方法來查找python中兩個字符串之間的不匹配總數。我輸入的是,像這樣兩個字符串之間的總不匹配

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

,我每串,我想看看需要多少差異具有序列"sequence=AGATAA"列表。所以如果輸入是從上面的列表中[0],輸出會這樣寫:

sequence=AGATGG, 2 

我無法弄清楚每個字母是否分割成單獨的列表或者我是否應該嘗試和比較整個字符串不知何故。任何幫助是非常有用的,感謝

+0

你是什麼意思*「差異」*?只是成對的字符比較,或例如http://en.wikipedia.org/wiki/Levenshtein_distance,或...? – jonrsharpe 2014-11-24 16:32:48

+0

定義一個方法,其循環從0到字符串的字符數。對於每個字符,如果來自引用字符串的當前字符與檢查字符串中相同索引處的字符不同,則遞增計數器。當你完成這項工作時,你的櫃檯有兩個字符串的確切數量的差異。 – Antwane 2014-11-24 16:33:10

回答

1

首先,我認爲你最安全的選擇是使用Levenshtein與一些圖書館的距離。但既然你用Biopython標註,您可以用pairwise

  1. 首先要擺脫的「序列=」。您可以切片每個字符串或

    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

2

你可以很容易地計算使用sumzip兩個字符串之間的成對不匹配的總數:

>>> s1='AGATGG' 
>>> s2='AGATAA' 
>>> sum(c1!=c2 for c1,c2 in zip(s1,s2)) 
2 
如果你要處理的字符串,其大小相同的不

,您可能需要更喜歡from itertools import zip_longest而不是zip

相關問題