@HelloDarknessMyOldFried

IndexError: string index out of range — в чем причина?

Доброго времени суток!
Я новичок, пытаюсь написать программу, которая будет в строке находить повторяющиеся буквы, считать их количество подряд выводить что-то наподобие этого: s = 'aaaabbсaa' преобразуется в 'a4b2с1a2'.
Но на выходе получаю ошибку IndexError: string index out of range. Ошибка возникает после использования цикла for in.
Прошу помощи, код прилагаю ниже.
genome = 'aaaabbcaa'
a = 1
s = 1
g = ''
for i in genome:
    if genome[a-1]==genome[a]:
        a += 1
        s += 1
    else:
        g += (genome[a-1]+str(s))
        a += 1
        s += 1
print(g)
----------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-176-241c9dc2be5a> in <module>
      4 g = ''
      5 for i in genome:
----> 6     if genome[a-1]==genome[a]:
      7         a += 1
      8         s += 1

IndexError: string index out of range
  • Вопрос задан
  • 6771 просмотр
Решения вопроса 2
@dimoff66
Кратко о себе: Я есть
HelloDarknessMyOldFried, Я бы предложил
следующий код

genome = 'aaaabbcaa'
cnt = 0
res = ''
for i in range(len(genome)):
  newSymb = i == 0 or genome[i] != genome[i - 1]
  if newSymb:
      if cnt > 0: g += str(cnt)
      res += genome[i]
      cnt = 1
  else:
      cnt += 1
res += str(cnt)

print(res)


Ответ написан
Комментировать
@gorodnev
Мой вариант такой, в принципе вместо дека можно использовать и обычный list:

import collections
genome = 'aaaabbcaa'
result = collections.deque()
genome += '$'
last = genome[0]
counter = 1
for c in genome[1:]:
  if c == last:
    counter += 1
  else:
    result.append('%s%d' % (last, counter))
    last = c
    counter = 1
print(''.join(result))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Hcuy
@Hcuy
Профессионально считаю ворон.
Как вариант можете также можете рассмотреть мой вариант:
spoiler
genome = 'aaaabbcaa'
gn = list(genome)
arr = []
text = ''
ln = len(gn)
for i in range(ln):
	a = 0
	for j in range(ln-1):
		if gn[i] == gn[j+1]:
			a +=1	
	text = gn[i] + str(a)
	arr.append(text)

arr = ''.join(arr)
print (arr)

Останется сделать малое: убрать повторяющиеся элементы и что-то сделать с последними 'aa'. Удачи!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы