计算Python字符串中连续重复字母的实例

时间:2014-08-15 16:48:49

标签: python string algorithm count

我试图弄清楚如何计算字符串中出现3次的字母数。该字符串来自raw_input()

例如,如果我的输入是:

abceeedtyooo 

输出应为:2

这是我目前的代码:

print 'Enter String:'
x = str(raw_input (""))

print  x.count(x[0]*3)

2 个答案:

答案 0 :(得分:3)

计算恰好出现3次的连续重复字母数:

>>> from itertools import groupby
>>> sum(len(list(dups)) == 3 for _, dups in groupby("abceeedtyooo"))
2

答案 1 :(得分:2)

要计算字符串中的字符数,可以使用collections.Counter

>>> from collections import Counter
>>> counter = Counter("abceeedtyooo")
>>> print(counter)
Counter({'e': 3, 'o': 3, 'a': 1, 'd': 1, 'y': 1, 'c': 1, 'b': 1, 't': 1})

然后您可以按如下方式过滤结果:

>>> result = [char for char in counter if counter[char] == 3]
>>> print(result)
['e', 'o']

如果您只想匹配连续字符,可以使用正则表达式(参见re):

>>> import re
>>> result = re.findall(r"(.)\1\1", "abceeedtyooo")
>>> print(result)
['e', 'o']
>>> result = re.findall(r"(.)\1\1", "abcaaa")
>>> print(result)
['a']

如果相同的字符连续三次连续出现(例如在"aaabcaaa"上,它将匹配'a'两次),这也会匹配。匹配不重叠,因此在"aaaa"上它只匹配一次,但在"aaaaaa"上匹配两次。如果您不希望连续字符串上有多个匹配项,请将正则表达式修改为r"(.)\1\1(?!\1)"。为避免匹配任何字符 more 连续3次,use (.)(?<!(?=\1)..)\1{2}(?!\1)。这解决了Python的正则表达式模块无法处理(?<!\1)的问题。