2014-10-09 38 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', '']