Skip to main content
 首页 » 编程设计

python之确定字符串中字符重复的长度和位置

2025年05月04日16Leo_wl

假设一个字符串 s 可能包含多个相邻的破折号。为了简单起见,我们将这些事件中的每一个都称为“重复动机”。例如,下面的字符串s包含五个重复的破折号动机,长度分别为3、2、6、5和1。

s = "abcde---fghij--klmnopq------rstuvw-----xy-z" 

我正在尝试编写 Python 代码,该代码返回每个重复动机的字符串中的相应长度和相应位置。优选地,代码返回元组列表,每个元组的格式为(长度,位置)。

sought_function(s) 
# [(3,5), (2,13), (6,22), (5,34), (1,41)] 

对于如何启动这段代码,您有什么建议吗?

请您参考如下方法:

你可以使用groupby:

s = "abcde---fghij--klmnopq------rstuvw-----xy-z" 
from itertools import groupby 
[(next(g)[0], sum(1 for _ in g) + 1) for k, g in groupby(enumerate(s), lambda x: x[1]) if k == "-"] 
# [(5, 3), (13, 2), (22, 6), (34, 5), (41, 1)] 

或者如@Willem 评论的那样,将 sum 替换为 len:

[(next(g)[0], len(list(g)) + 1) for k, g in groupby(enumerate(s), lambda x: x[1]) if k == "-"] 
# [(5, 3), (13, 2), (22, 6), (34, 5), (41, 1)]