@Timebird

Как «стянуть» последовательность букв в одну букву?

Здравствуйте! Нужна программа, которая принимает на вход строку s и "стягивает" последовательности одинаковых букв типа:
aaabcc --> abc
abcd --> abcd
aAaaabbccdcc --> aAabcdc.

Сам пытался написать вот так, но не понимаю, почему на этапе удаления объекта из списка выскакивает ошибка:
s = input()
 
letters = []
 
for num, letter in enumerate(s):
    letters.append(letter)
 
if letters[num-1] == letters[num]:
    letters.remove(letter)

Ошибка такая:
if letters[num-1] == letters[num]:
IndexError: list index out of range
  • Вопрос задан
  • 211 просмотров
Решения вопроса 2
adugin
@adugin Куратор тега Python
Вариант #1 (pythonic):
from itertools import groupby

def squeeze(text):
    return ''.join(key for key, group in groupby(text))

squeeze('aAaaabbccdcc')  # => 'aAabcdc'

Вариант #2 (примитивный):
def squeeze(text):
    for c1, c2 in zip(text[:-1], text[1:]):
        if c1 != c2:
            yield c1
    yield c2

''.join(squeeze('aAaaabbccdcc'))  # => 'aAabcdc'

Вариант #3 (говнокод, но для разнообразия):
from operator import ne
from itertools import compress, chain

def squeeze(text):
    return ''.join(chain(compress(text, map(ne, text[:-1], text[1:])), text[-1]))

squeeze('aAaaabbccdcc')  # => 'aAabcdc'
Ответ написан
Комментировать
@Araben
s="aAaaabbccdcc"
letters=s[0]
for letter in  s[1:]:
    if letter!=letters[-1]:
        letters+=letter
print letters
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы