我试图弄清楚如何计算字符串中出现3次的字母数。该字符串来自raw_input()
。
例如,如果我的输入是:
abceeedtyooo
输出应为:2
这是我目前的代码:
print 'Enter String:'
x = str(raw_input (""))
print x.count(x[0]*3)
答案 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)
的问题。