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

3 投票
3 回答
5130 浏览
提问于 2025-04-18 17:25

我正在想办法计算一个字符串中出现三次的字母数量。这个字符串是通过 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)的问题。

撰写回答