Очередная string index out of range, знаю где и почему, но не знаю как пофиксить.. Помогите плиз!

s=input()
j=1
x=0
for i in s:
    if s[x]==s[x+1]: #здесь на ласт итерации я выхожу из рэнжи и понятное дело все взрывается
        j+=1
        x+=1
        continue
    elif s[x]!=s[x+1]: 
        print(s[x]+str(j),end='')
        j=1
        x+=1
        continue    
    else: 
        print(s[-1]+str(j),end='')    
        break

#код должен преобразовывать hhgggjjjj в h2g3j4 , если есть варик натолкнуть меня на мысль без слов #что код у меня кривой неправильный и некрасивый ,буду благодарен(я новичок и пишу только 2 #недели) Заранее блогодарю)


Ответы (2 шт):

Автор решения: Алексей Белкин
str_sample = 'hhgggjjjj'

counter = 1
str_out = ''
# идете по символам тестовой строки, начиная со 2го символа(т.к. 1ый символ нужен для сравнения)
for index in range(1, len(str_sample)):
# если текущий символ равен предыдущему, то увеличиваете счетчик
    if str_sample[index] == str_sample[index-1]:
        counter += 1
# символ другой. счетчику задаем начальное значение равное 1
    else:
        str_out += str_sample[index-1] + str(counter)
        counter = 1
#прерывания  цикле не будет и добавите к строке количество повторений для последнего символа 
else:
    str_out += str_sample[-1] + str(counter)
# ну и тут Ваш результат
print(str_out)  # h2g3j4
→ Ссылка
Автор решения: gil9red

Из коробки есть удобная функция для подобной задачи - itertools.groupby

Она ищет последовательности символов (один символ тоже попадает) и возвращает кортежи: в k символ последовательности, в g - итератор из найденных символов последовательности. Например, для "hh" в k будет "h", а в g - "hh"

Пример:

from itertools import groupby

text = 'hhgggjjjj'
result = ''.join(f'{k}{len(list(g))}' for k, g in groupby(text))
print(result)
# h2g3j4
→ Ссылка