计算Python字符串中连续重复字母的实例数量
我正在想办法计算一个字符串中出现三次的字母数量。这个字符串是通过 raw_input()
获取的。
比如,如果我的输入是:
abceeedtyooo
那么输出应该是:2
这是我现在的代码:
print 'Enter String:'
x = str(raw_input (""))
print x.count(x[0]*3)
3 个回答
1
我们可以通过'for'循环来计算字符串中的字符数量
s="abbbaaaaaaccdaaab"
st=[]
count=0
for i in set(s):
print(i+str(s.count(i)),end='')
输出结果: a10c2b4d1
3
要计算连续出现且恰好出现3次的重复字母的数量:
>>> from itertools import groupby
>>> sum(len(list(dups)) == 3 for _, dups in groupby("abceeedtyooo"))
2
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)"
。如果你想避免匹配任何连续出现超过三次的字符,可以使用(.)(?<!(?=\1)..)\1{2}(?!\1)
。这个方法解决了Python的正则模块无法处理(?<!\1)
的问题。