Tengo este problema y simplemente no puedo hacerlo bien. Tengo que eliminar los caracteres duplicados de una cadena.
phrase = "oo rarato roeroeu aa rouroupa dodo rerei dde romroma"El resultado debe ser: "O rato roeu a roupa do rei de roma"
Intenté cosas como:
def remove_duplicates(value): var="" for i in value: if i in value: if i in var: pass else: var=var+i return var print(remove_duplicates(entrada))Pero aún no está ahí...
¿Algún consejo que me guíe aquí?
De su ejemplo, parece que desea eliminar SECUENCIAS REPETIDAS de caracteres, no caracteres duplicados en toda la cadena. Así que esto es lo que estoy resolviendo aquí.
Puede usar una expresión regular... no estoy seguro de cuán terriblemente ineficiente es, pero funciona.
>>> import re >>> phrase = str("oo rarato roeroeu aa rouroupa dodo rerei dde romroma") >>> re.sub(r'(.+?)\1+', r'\1', phrase) 'o rato roeu a roupa do rei de roma'Cómo procede esta sustitución a lo largo de la cadena:
oo -> o " " -> " " rara -> ra to -> to " "-> " " roeroe -> roeetc..
Editar: funciona para la otra cadena de ejemplo que no debe modificarse:
>>> phrase = str("Barbara Bebe com Bernardo") >>> re.sub(r'(.+?)\1+', r'\1', phrase) 'Barbara Bebe com Bernardo'Lo que puede hacer es formar un conjunto a partir de la cadena y luego ordenar las letras restantes de acuerdo con su orden original.
def remove_duplicates(word): unique_letters = set(word) sorted_letters = sorted(unique_letters, key=word.index) # this will give you a list return ''.join(sorted_letters) words = phrase.split(' ') new_phrase = ' '.join(remove_duplicates(word) for word in words)En realidad, agrego un espacio al final del space . Después de eso esto está funcionando
código
phrase =("oo rarato roeroeu aa rouroupa dodo rerei dde romroma ") print(phrase) ch="" ali=[] for i in phrase: if i ==" ": print(ch) ch="" if i not in ch: ch=ch+iProducción
o rato roeu a roupa do rei de roma