2014-10-09 40 views
-3

我正在使用代碼來查找seq_find在seq_long中的位置,並且試圖打印出對齊結束時seq_long中的索引。如何打印對齊序列末尾的索引?

seq_long="CCGACATCGTCCTCACCGACCATCGTCCTGCATCGTCCT" 
seq_find="CATCGTCCT" 
matching_seq_index=[] 
matching_seq_range=[] 
matching_seq_index_end=[] 
for x in range(len(seq_long)): 
    search=seq_long[x:x+9] 
    matched=[] 
    if search==seq_find: 
     matching_seq_index.append(x) 
     matching_seq_index_range.append(len(search)) 
     matching_seq_index_end.append(x:x+len(search)) 
    else: 
     pass 
print matching_seq_index 
+3

你究竟面臨的問題是什麼?錯誤的輸出?程序崩潰? – csmckelvey 2014-10-09 16:26:48

回答

0

你需要改變:

matching_seq_index_end.append(x:x+len(search)) 

到:

matching_seq_index_end.append(x+len(search)) 
使用 re.finditer

不管怎麼說更短的版本和列表理解:

>>> import re 
>>> [m.end() for m in re.finditer(seq_find, seq_long)] 
[13, 29, 39] 
+0

好吧,所以我看到了如何工作給我的最後一個排列索引,但我如何繼續完成序列?一旦找到第一個對齊,它就會停止。 – bk4488 2014-10-09 16:41:28

+0

@ bk4488我現在正在輸出'[13,29,39]'作爲輸出,您的預期輸出是什麼? http://ideone.com/C7bTDe – 2014-10-09 16:44:01

+0

對不起,我有一些錯誤的改變。我現在得到所有三個開始和結束指數。非常感謝你的幫助! – bk4488 2014-10-09 16:47:45

0

如果喲u將seq_longseq_find分開,您會發現在seq_long中您的seq_find重複了多少次,所以使用簡單的代碼可以打印出對齊結束的seq_long中的索引。 :

>>> seq_long.split(seq_find) 
['CCGA', 'CACCGAC', 'G', ''] 

>>> [end_sign[0] if len(end_sign)>0 else '' for end_sign in seq_long.split(seq_find)] 
['C', 'C', 'G', '']