2017-04-07 47 views
1

所以我有一個DNA序列轉換成字符串不同字母一個字母與多輸出

DNA = "TANNNT"

where N = ["A", "G", "C", "T"]

我希望有TAAAAT, TAAAGT, TAAACT, TAAATT.....等所有可能的輸出。

現在從網上我發現了排列的解決方案,我可以做 perms = [''.join(p) for p in permutations(N, 3)] 然後就重複我的DNA序列 TA + perms + T

,但我不知道是否有更簡單的方法來做到這一點,因爲我有很多更多的DNA序列,並花費更多的時間來硬編碼。

編輯:

的硬編碼部分將作爲我必須聲明

N1 = [''.join(p) for p in permutations(N, 1)] 
N2 = [''.join(p) for p in permutations(N, 2)] 
N3 = [''.join(p) for p in permutations(N, 3)] 

然後在N3爲我做的:

key = "TA" + N3[i] + "T" 

由於我的順序是相當長的時間,我不想計算序列中連續有多少個NI,並且想要了解是否有更好的方法來做到這一點。

+0

這是什麼部分硬編碼,你想避免? –

+0

我把這個編輯 –

回答

0

您可以使用置換結果格式化像一個字符串:

代碼:

import itertools as it 
import re 

def convert_sequence(base_string, target_letter, perms): 
    REGEX = re.compile('(%s+)' % target_letter) 
    match = REGEX.search(base_string).group(0) 
    pattern = REGEX.sub('%s', base_string) 
    return [pattern % ''.join(p) for p in it.permutations(perms, len(match))] 

測試代碼:

print(convert_sequence('TANNNT', 'N', ['A', 'G', 'C', 'T'])) 

結果:

['TAAGCT', 'TAAGTT', 'TAACGT', 'TAACTT', 'TAATGT', 
'TAATCT', 'TAGACT', 'TAGATT', 'TAGCAT', 'TAGCTT', 
'TAGTAT', 'TAGTCT', 'TACAGT', 'TACATT', 'TACGAT', 
'TACGTT', 'TACTAT', 'TACTGT', 'TATAGT', 'TATACT', 
'TATGAT', 'TATGCT', 'TATCAT', 'TATCGT'] 
+0

謝謝,這實際上有幫助。我一直忘記使用正則表達式,因爲我還不熟悉unix –

相關問題