如何在Python 3中计算字符串中连续字母的实例?

时间:2018-04-11 09:54:13

标签: python string python-3.x

我想计算给定字符串中连续字母相同的实例数。

例如,我的字符串输入是:

EOOOEOEE

我只想找到有多个连续'O'的场合。

输出应为:

1

因为,只有一组O连续出现。

4 个答案:

答案 0 :(得分:1)

您可以使用regex

>>> import re
>>> s = 'EOOOEOEEOO'
>>> sum(1 for x in re.finditer(r'O{2,}', s))
2

答案 1 :(得分:1)

这可以通过itertools.groupby

实现
from itertools import groupby

x = 'EOOOEOEE'

res = sum(len(list(j)) > 1 for i, j in groupby(x) if i == 'O')  # 1

答案 2 :(得分:0)

只需使用for循环计算:

n = 0
g = 0
s = 'EOOOEOEE'
for c in s:
    if c == 'O':
        g += 1
    elif g:
        if g > 1:
            n += 1
        g = 0

if g:
    n += 1

n设为1

答案 3 :(得分:0)

我假设您想知道所有字母在字符串中连续的次数,而不仅仅是字母“O'”。

创建一个字符字典,将该计数作为键的值保存为字符串中的字符。 char_dict = {}

这个想法是要有两个匹配的条件

(1)当前字符是否与前一个字符相同

(2)如果第一个条件为真,那么当前的一对连续字符是具有相同连续字符的较大子字符串的一部分。 简而言之,以ABBBCBB为例。当我们遇到第三个B时,我们要检查它是否是连续且已经考虑的子串的一部分。即BBB应该给连续计数为1而不是2.为了实现这一点,我们使用一个标志变量来检查这些条件。

如果我们仅使用(1)st条件BBB将计为BBBB而不是单BBB

其余代码非常简单。

char_dict = {}
string = "EOOOEOEEFFFOFEOOO"
prev_char = None
flag=0

for char in list(string):
    if char not in char_dict:
        #initialize the count by zero
        char_dict[char] = 0

if char == prev_char and flag !=0:
    char_dict[char] += 1
    flag = 0
else:
    flag = 1

prev_char = char

print(char_dict)