@kitwexin

Как убрать все идущие подряд идентичные символы в строке?

Нудно проанализировать файл и убрать все идущие подряд символы, которые повторяются по два раза.
Пример ввода: wwaldaadicffenn.
Вывод: alice.
Мой код почему-то игнорирует daad в центре:

arr2 = []

with open("input.txt",'r') as message:
    for line in message:
        arr = list(line)
        for i in arr:
            if arr[arr.index(i)] != arr[arr.index(i)+1]:
                arr2.append(i)
print(arr2)

Мой вывод: ['a', 'l', 'd', 'a', 'a', 'd', 'i', 'c', 'e'].
Что не так?
  • Вопрос задан
  • 1775 просмотров
Пригласить эксперта
Ответы на вопрос 4
Alexeytur
@Alexeytur
arr2 = []

with open("input.txt",'r') as message:
    for line in message:
        arr = list(line)
        i = 0
        while i < len(arr):
	        if i == len(arr)-1 or arr[i] != arr[i+1]:
	            arr2.append(arr[i])
              i += 1
	        else:
              i += 2
print(arr2)
Ответ написан
Комментировать
LazyTalent
@LazyTalent
Data Engineer, Freelancer
import re

s = "wwaldaadicffenn"

regex = re.compile(r"([a-z])\1+")

while True:
    if not regex.findall(s):
        break
    s = regex.sub("", s)
Ответ написан
@MasterCard000
Кончено не особо красива получилось, на скорую руку набросал, но данная функция выполняет ваш запрос

with open("input.txt",'r', encoding="utf-8") as message:
    data = message.read()

arr_str = "55ццуучффвввтиио99аа 1122ткккппрро 33ттаапттоттткккккклммучифффлввосрррь"
def double(arr):
    """
    цикл работает до тех пор, пока мы не
    убедимся в том, что, идущие подряд символы,
    которые повторяются по два раза, были удалены

    """
    while True:
        arr2 = ""
        gap = 0
        try:
            for i in range(len(arr)):
                if arr[i] != arr[i+1]: # если не совпадает символ идем дальше, первый и второй символ
                    if arr[i] != arr[i-1]:  # проверяем первый и перед ним символ
                        arr2 += arr[i] # если не совпадают записываем
                else:
                    gap += 1
        except: # исключение, если в строке нет индекса +1
            if arr[i] != arr[i-1]:  # проверяем первый и перед ним символ
                arr2 += arr[i] # если не совпадают записываем
            arr = "" # очищаем строку, для записи новых данных
            arr += arr2 # записываем
            if gap == 0: # останавливаем цикл, так как дублирующих подряд символов нет
                break
    return arr
    
print(double(arr_str))
print(double(data))
Ответ написан
Комментировать
@Drill
Похожая задача уже была здесь
Там есть решение с использованием стека.
С минимальными изменениями подходит и для вашей задачи.

def del_dup(line):
    stack = []
    for char in line:
        stack.pop() if stack and char == stack[-1] else stack.append(char)
    return ''.join(stack)

text = 'wwaldaadicffenn'
print(del_dup(text))

In [4]: 
alice
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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