Восприятие двух последовательных строк в строке - PullRequest
0 голосов
/ 18 мая 2018

Если у меня есть aaabbbccc, я бы хотел изменить их на a3b3c3.

Я использую оператор if для этого .. но это выглядит слишком неэффективно.

Может быть, Regex был бы полезен, но регулярное выражение для поиска только последовательных элементов возможно?

, если у меня есть aaabbbcccaaa, тогда я хотел бы изменить их a3b3c3a3 перечислить это .. что означает, что алгоритм только ищет«Последовательности и считать их» превращаются в целые числа.

Любая подсказка для продолжения будет принята.

def comp(string):


index = []

for i in range(len(string)):
    try:
        if string[i] is not string[i+1]:
            index.append(i)
    except:
        pass

first = string[index[0]] + str(index[0]+1)
print(first)

message_comp = [first]
for i in range(1, len(message_comp)):
    message_comp.append(message[index[i]]*(index[i-1]+1))

final = ''.join(message_comp)

return final

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Может быть, itertools groupby?

from itertools import groupby
s = "aaabbbcccaaa"
groups = groupby(s)
a = [(label, sum(1 for _ in group)) for label, group in groups]
b = [i for sub in a for i in sub]
print("".join(map(str,b)))

output: a3b3c3a3
0 голосов
/ 18 мая 2018

itertools.groupby:

Создать итератор, который возвращает последовательные ключи и группы из итерируемого

import itertools
x = 'aaabbbcccaaa'
groups = [i + str(len([*j])) for i, j in itertools.groupby(x)]

# ['a3', 'b3', 'c3', 'a3']

join для завершения:

''.join(groups)

# a3b3c3a3

При необходимости replace для удаления 1:

''.join(groups).replace('1', '') вместо ''.join(groups)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...