查找字符串中的连续字符及其开始和结束索引(python)

2024-05-16 14:49:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我将使用长度约为365个字符的字符串。在这些字符串中,我希望找到字符“-”的连续运行以及每个连续运行的开始和结束索引。这应该包括角色只出现一次的实例

考虑下面的字符串:“A -B-cccc-----”。我想知道的是,连续出现三个'-'字符,然后出现一次,然后连续出现五个'-'字符。我也想知道他们的起点和终点位置。在元组列表(开始、结束、连续数)中报告结果是可以的,例如:

[(1,4,3), (5,5,1), (10,14,5)]

我考虑过将itertools与enumerate结合使用。然而,我不能完全正确地理解它。我根据前面的问题将其拼凑在一起,但缺少起始索引:

counts=[]
count=1
for idx, (a,b) in enumerate(itertools.zip_longest(s, s[1:], fillvalue=None)):
    if a==b=="-":
        count += 1
    elif a!=b and a =="-":
        counts.append((idx,count))
        count = 1
print(counts)

输出:

[(3, 3), (5,1), (14,5)]

我从其他问题中拼凑出以下内容:

g = groupby(enumerate(s), lambda x:x[1])
l = [(x[0], list(x[1])) for x in g if x[0] == '-']
[(x[1][0][0],x[1][-1][0], len(x[1])) for x in l]

输出:

[(1, 3, 3), (5, 5, 1), (10, 14, 5)]

这似乎有效,但我不太明白它的逻辑,我也不确定它是否会一直有效。有更好的办法吗?或者这是最有效的吗?我将需要执行搜索数十万次,所以效率是这里的关键

谢谢


Tags: 实例字符串in角色forifcount字符