在Python中查找下一个10个字符内的不同字符串重复项

1 投票
2 回答
539 浏览
提问于 2025-04-17 09:57

我正在处理一个问题,需要在找到一个初始字符串后,找出各种字符串的重复情况。比如我们取字符串 ACTGAC,那么数据文件中的序列可能是这样的:

AAACTGACACCATCGATCAGAACCTGA

在这个字符串中,一旦找到 ACTGAC,我需要分析接下来的10个字符,看看里面有没有重复的字符串,这些重复是有一些规则的。我已经把规则写好了,但有人能告诉我,一旦找到我需要的字符串后,怎么提取接下来的十个字符来分析吗?我知道 str.partition 函数可以做到这一点,找到字符串后,再用 [1:10] 就能获取接下来的十个字符。

谢谢!

2 个回答

0

根据marcog在Python中查找子字符串的所有出现中的回答,我提出了以下内容:

>>> import re
>>> data = 'AAACTGACACCATCGATCAGAACCTGAACTGACTGACAAA'
>>> sep = 'ACTGAC'
>>> [data[m.start()+len(sep):][:10] for m in re.finditer('(?=%s)'%sep, data)]
['ACCATCGATC', 'TGACAAA', 'AAA']
4

你几乎已经搞定了(不过要注意,在Python中,索引是从开始计数的)。

partition方法会根据第一次出现的separator把一个字符串分成head, separator, tail三部分。

所以你只需要从tail中取出前十个字符就可以了:

>>> data = 'AAACTGACACCATCGATCAGAACCTGA'
>>> head, sep, tail = data.partition('ACTGAC')
>>> tail[:10]
'ACCATCGATC'

在Python中,你可以在切片时省略起始索引(默认是零,也就是字符串的开头),也可以省略结束索引(默认是字符串的长度)。

值得注意的是,你也可以把整个操作写成一行,像这样:

>>> data.partition('ACTGAC')[2][:10]
'ACCATCGATC'

撰写回答