J'ai besoin de créer une fonction qui remplace les caractères consécutifs répétés par un seul caractère, par exemple:
'hiiii how are you??' -> 'hi how are you?' 'aahhhhhhhhhh whyyyyyy' -> 'ah why' 'foo' -> 'fo' 'oook. thesse aree enoughh examplles.' -> 'ok. these are enough examples'
5 Réponses :
En utilisant une itération simple.
Démo:
hi how are you? ah why fo ok. these are enough examples.
Sortie:
def cleanText(val):
result = []
for i in val:
if not result:
result.append(i)
else:
if result[-1] != i:
result.append(i)
return "".join(result)
s = ['hiiii how are you??', 'aahhhhhhhhhh whyyyyyy', 'foo', 'oook. thesse aree enoughh examplles.']
for i in s:
print(cleanText(i))
Vous pouvez essayer une expression régulière comme (.) \ 1+ , c'est-à-dire "quelque chose, puis plus du même quelque chose", et la remplacer par \ 1 , c'est-à-dire "ce premier quelque chose".
>>> import functools
>>> dedup = functools.partial(re.sub, r"(.)\1+", r"\1")
>>> dedup('oook. thesse aree enoughh examplles.')
'ok. these are enough examples.'
Faites-en une fonction avec functools.partial (ou de toute autre manière que vous aimez)
>>> import re >>> re.sub(r"(.)\1+", r"\1", 'aahhhhhhhhhh whyyyyyy') 'ah why' >>> re.sub(r"(.)\1+", r"\1", 'oook. thesse aree enoughh examplles.') 'ok. these are enough examples.'
def dup_char_remover(input):
output=""
t=""
for c in input:
if t!=c:
output = output + c
t=c
return output
input = "hiiii how arrrre youuu"
output=dup_char_remover(input)
print(output)
hi how are you
Une solution peut être exprimée de manière très compacte en utilisant itertools.groupby :
>>> [remove_repeated_characters(s)
for s in ['hiiii how are you??','aahhhhhhhhhh whyyyyyy',
'foo', 'oook. thesse aree enoughh examplles.']]
['hi how are you?', 'ah why', 'fo', 'ok. these are enough examples.']
itertools.groupby regroupe les objets dans un itérable par la fonction clé donnée. Les groupes sont accumulés tant que les clés sont équivalentes. Si aucune fonction clé n'est donnée, l'identité des éléments est utilisée, dans ce cas les caractères.
Une fois que vous les avez regroupés par leur identité, vous pouvez alors joindre les objets en une seule chaîne. Les objets groupés sont renvoyés sous forme de tuples contenant l'objet et un objet interne itertools._grouper , que pour vos besoins, vous pouvez ignorer et extraire le caractère.
Cela peut être transformé en une fonction comme suit:
def remove_repeated_characters(s):
groups = itertools.groupby(s)
cleaned = ''.join(g[0] for g in groups)
return cleaned
Il en résulte les valeurs attendues:
>>> import itertools
>>> ''.join(g[0] for g in itertools.groupby('hiiii how are you??'))
'hi how are you?'
from collections import OrderedDict
def removeDupWord(word):
return "".join(OrderedDict.fromkeys(word))
def removeDupSentence(sentence):
words = sentence.split()
result = ''
return ''.join([result + removeDupWord(word) + ' ' for word in words])
sentence = 'hiiii how are you??'
print (removeDupSentence(sentence))
>>> hi how are you?
Salut @Santiago M.! Qu'est-ce que tu as essayé jusque-là? Veuillez fournir un code, si c'est possible. Si cette question concerne un devoir, veuillez lire ceci un fil>.