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

3
我将尝试解决如何计算字符串中出现3次的字母数量。该字符串来自于raw_input()
例如,如果我的输入为:
abceeedtyooo 

输出应该是:2。
这是我的当前代码:
print 'Enter String:'
x = str(raw_input (""))

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

你已经解释了你想要做什么,但没有说明你的具体问题是什么。你是否遇到了异常?结果不佳?电脑屏幕爆炸了吗? - skrrgwasme
这是一道作业题吗? - pcurry
如果这是一个作业问题,我们仍然可以帮助您,但您必须提供一些细节,以便我们引导您找到解决方案,而不是直接给出答案。 - skrrgwasme
你想将连续重复项计算在内,就像你的示例一样吗? - jfs
是的,这就是我想做的——计算字符串中有多少个连续的三个重复字符。 - Paul Van Doren
3个回答

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)"。为了避免匹配任何连续出现超过3次的字符,请使用使用(.)(?<!(?=\1)..)\1{2}(?!\1)。这解决了 Python 正则表达式模块无法处理 (?<!\1) 的问题。


我使用了这个代码,它可以打印出连续三个重复字母的字母, 那么我该如何计算结果呢? 在这种情况下,我想要计算出"e"和"o"的数量,这将给我输出'2'。例如,如果我有aaabbbccc: 计数将是:3。 - Paul Van Doren
使用len函数查找结果列表的长度:print(len(result))应输出2 - hlt
为什么有些字母组合无法计数,例如我的字符串是:abcaaa,结果为0? - Paul Van Doren
因为 a 出现了 4 次,所以我要为 3 个 连续 字符添加一些东西... - hlt
你很棒!谢谢! - Paul Van Doren

1

我们可以通过“for”循环计算字符串中的字符数

s="abbbaaaaaaccdaaab"
st=[]
count=0
for i in set(s):
    print(i+str(s.count(i)),end='')

输出:a10c2b4d1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接