Python 如何打印对齐序列末尾的索引?

Python 如何打印对齐序列末尾的索引?,python,Python,我使用代码查找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

我使用代码查找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   
您需要更改:

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

总之,一个简短得多的版本使用和列表理解:

>>> import re
>>> [m.end() for m in re.finditer(seq_find, seq_long)]
[13, 29, 39]
如果将seq_long与seq_find分开,您会发现seq_find在seq_long中重复了多少次,因此,使用简单的代码,您可以在对齐结束处以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', '']

你到底面临什么问题?输出错误?程序崩溃?好的,我知道它是如何工作的,可以给我对齐的最后一个索引,但是我如何继续序列?一旦找到第一个对齐方式,它就会停止。@bk4488我现在得到[13,29,39]作为输出,您期望的输出是什么?对不起,我错把东西换了。我现在得到了所有三个开始和结束索引。非常感谢你的帮助!
>>> 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', '']