Преобразование строки

260 просмотра
0
0 Комментариев

Здравстуйте начал изучать питон, столкнулся с задачей, в которой нужно строку типа: ‘aaabbcd’ преобразовать в ‘a3b2c1d1’. Подскажите решение.

Решение мое кривое:

s = input()
s2 = ''
i = 0
j = i + 1
ct = 1
while i < len(s):
    if s[i] == s[j]:
        ct += 1
    elif s[i] != s[j] or i == len(s):
        s2 += s[i] +  str(ct)
        ct = 1
    i += 1
print(s2)

Output:

введите сюда описание изображения

введите сюда описание изображения

А если ввести например четыре а подряд, то ничего вообще не выводится.
И нормально ли объявлять пустую строку, когда неизвестна длинна строки?


Добавить комментарий

2 Answers

Python Опубликовано 10.12.2018
0

Воспользуйтесь itertools.groupby:

In [99]: from itertools import groupby
 
In [100]: s = 'aaaasadsdasd'
 
In [101]: ''.join(['{}{}'.format(c, sum(1 for _ in g)) for c, g in groupby(s)])
Out[101]: 'a4s1a1d1s1d1a1s1d1'

или collections.Counter если считаем все вхождения, а не только последовательные:

In [104]: from collections import Counter
 
In [105]: ''.join(['{}{}'.format(c,n) for c,n in Counter(s).items()])
Out[105]: 'a6s3d3'

Добавить комментарий
0

import re
result = ''
input = 'asskkkfhhh'
 
for (full, ch) in re.findall(r'(([a-z])\2*)', input):
    result += ch + str(len(full))
 
print result # a1s2k3f1h3

https://repl.it/K2ZY/0

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up