【发布时间】:2021-07-30 06:02:37
【问题描述】:
对于给定的子字符串,我需要按顺序确定给定字符串中该子字符串的重复链的所有长度。
示例:对于子字符串ATT 和字符串ATTATTATT GGG ATTATT GGG ATT,我想返回(3,2,1)。
我想我有一个解决方案,但它不优雅并且可能很慢(写在下面)。我想在子字符串的起始位置使用more_itertools.consecutive_groups(),但不知道如何调整长度超过 1 的子字符串。
spans = [i.span() for i in
finditer(substring,string)]
lengths = []
runninglength = 1
for i in range(len(spans)):
if i == len(spans)-1:
lengths.append(runninglength)
elif spans[i][1] == spans[i+1][0]:
runninglength += 1
else:
lengths.append(runninglength)
runninglength = 1
return tuple(lengths)
有没有更快、更简单的方法来实现这一点?
【问题讨论】:
-
像
ATTGGGATTATT GGGATT这样的字符串可能吗?如果是这样,您的预期结果是什么? -
@Nick,出于习惯,我在字符串中留下了空格。任何字符串中都没有空格。您提到的字符串是可能的,如果固定子字符串是 ATT,则预期结果是 (1,2,1)。如果固定子串是 GGG,则预期结果将是 (1,1)。编辑:也就是说,空格不应该影响任何东西,因为无论如何找到子字符串的算法都应该跳过空格。
标签: python python-3.x string substring itertools