2017-08-22 41 views
0

我的路线是:发现出现次数

line = "aaaaaaaaaaaaaaxxxxxxxxxxxxxxbbbbbbbbbbbbxxxxxxxxxxxxxxxxxxxbbbbbbbbbbb" 

我怎样才能找到line“XXXXX”的补丁的数量?例如,上面的答案是2

请注意,'x's的数量可能会有所不同。

+0

你试过了什么? – Harsha

+0

我试过s.find('x')和s.rfind('x'),但它不会给我想要的结果 – ana

+0

至少有3个x是 – ana

回答

1

您可以使用groupby到组的每个“补丁”再算上出现的次数:

from itertools import groupby 

line = 'aaaaaaaaaaaaaaxxxxxxxxxxxxxxbbbbbbbbbbbbxxxxxxxxxxxxxxxxxxxbbbbbbbbbbb' 
number_of_x = sum(ch == 'x' for ch, _ in groupby(line)) 
+0

那真的很漂亮! –

+0

谢谢乔纳斯。它完美的作品。我想知道我什么时候能够编写这样的代码。 – ana

3

这是哪里的正则表达式是非常有用的一个很好的例子。我不是世界上最好的正则表达式时,但在这里是一个可行的片段:

import re 

line = "aaaaaaaaaaaaaaxxxxxxxxxxxxxxbbbbbbbbbbbbxxxxxxxxxxxxxxxxxxxbbbbbbbbbbb" 
patches = len(re.findall(r"(x+)", line)) 

该作品以“X”不管有多长匹配1或以上的团体。

+0

这是另一种一线解决方案。 Thanx – ana

+0

我怎样才能得到每个这样的补丁的开始和结束索引? – ana

+0

[这里是](https://stackoverflow.com/questions/3519565/find-the-indexes-of-all-regex-matches-in-python)一个问题,你正在寻找什么! – bendl