Как подсчитать количество последовательных букв в строке в python 3?

Я хочу подсчитать количество случаев, когда последовательные буквы идентичны в данной строке.

Например, мой строковый ввод:

EOOOEOEE

Я хотел бы только найти количество случаев, когда подряд идёт более одной буквы «О».

Результат должен быть:

1

Поскольку существует только один набор О, которые идут последовательно.

Значит, единственное «О» не в счет? Их должно быть двое или больше?

Aran-Fey 11.04.2018 11:56

что ты уже испробовал?

FHTMitchell 11.04.2018 11:56

Объясните свой ввод-вывод более подробно

Rachit kapadia 11.04.2018 11:56

Возможный дубликат Подсчитайте последовательные символы

l'L'l 11.04.2018 11:57

@ l'L'l Я не думаю, что OP хочет этого. Это выведет здесь 3 и 1. Если я правильно понимаю, OP хочет подсчитать, сколько прогонов из двух или более Os в строке.

Aran-Fey 11.04.2018 11:59

@ Аран-Фей: ОП должен выяснить это, просмотрев аналогичные вопросы и ответы.

l'L'l 11.04.2018 12:04

@ l'L'l Настройка кода из этих ответов для получения правильного результата потребует больше усилий, чем написание ответа с нуля. Если OP не может написать решение с нуля, я не понимаю, как они могут найти ответы на этот вопрос полезными. Я думаю, что далеко слишком отличается от вопроса, чтобы быть подходящим обманщиком.

Aran-Fey 11.04.2018 12:09

@ Аран-Фей Я согласен

Joe Iddon 11.04.2018 12:10

@ Аран-Фей: ОП не пытался написать решение - или, похоже, пробовал что-нибудь в этом отношении. Я согласен, может быть, другой вопрос немного отличается, хотя, по крайней мере, MCVE обычно лучше, чем кажется, что запускает бесплатную службу кодирования для пользователей, имеющих собственное право.

l'L'l 11.04.2018 12:15
3
9
3 135
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать регулярное выражение:

>>> import re
>>> s = 'EOOOEOEEOO'
>>> sum(1 for x in re.finditer(r'O{2,}', s))
2
Ответ принят как подходящий

Это возможно с itertools.groupby:

from itertools import groupby

x = 'EOOOEOEE'

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

А также спасибо за ответ, это был лучший ответ на мой вопрос

Mahir 11.04.2018 13:06

Сторонник не хочет объяснять? Не волнуйтесь, я не отвечаю, просто хочу знать, что мы можем улучшить ...

jpp 01.05.2018 22:15

Просто посчитайте с помощью цикла 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.

Я предполагаю, что вы хотите знать, сколько раз все буквы в строке идут подряд, а не только для буквы «О».

Создайте словарь символов, который будет хранить это количество как значения для ключей как символы в строке. char_dict = {}

Идея состоит в том, чтобы соответствовать двум условиям

(1) Текущий символ такой же, как и предыдущий.

(2) Если первое условие истинно, то текущая пара последовательных символов является частью более крупной подстроки, которая имеет одинаковые последовательные символы. Проще говоря, возьмем, к примеру, ABBBCBB. Когда мы сталкиваемся с третьим B, мы хотим проверить, является ли он частью подстроки, которая является последовательной и уже учтенной. т.е. BBB должен давать последовательный счет как 1, а не 2. Чтобы реализовать это, мы используем переменную флага, которая проверяет эти условия.

Если мы используем только (1) -е условие, BBB будет считаться как BB и BB, а не как один 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)

Другие вопросы по теме