Mic*_*udl 1 python string python-2.7
假设一个字符串s可能包含几个相邻的破折号.为简单起见,让我们将这些事件中的每一个称为"重复动机".例如,以下字符串s包含五个重复的破折号动机,即长度为3,2,6,5和1.
s = "abcde---fghij--klmnopq------rstuvw-----xy-z"
Run Code Online (Sandbox Code Playgroud)
我试图提出Python代码,它返回各自的长度和每个重复动机的字符串中的相应位置.优选地,代码返回元组列表,每个元组具有格式(长度,位置).
sought_function(s)
# [(3,5), (2,13), (6,22), (5,34), (1,41)]
Run Code Online (Sandbox Code Playgroud)
您对如何启动此代码有任何建议吗?
你可以使用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)]
Run Code Online (Sandbox Code Playgroud)
或者正如@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)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |