Comment puis-je supprimer les caractères en double d'une chaîne à l'aide de Python? Par exemple, disons que j'ai une chaîne:
foo = "SSYYNNOOPPSSIISS"
Comment puis-je faire la chaîne:
foo = SYNOPSIS
Je suis nouveau sur python et ce que je suis fatigué et ça marche. Je savais qu'il existe un moyen intelligent et optimal de le faire .. et seule l'expérience peut le montrer ..
def RemoveDupliChar(Word):
NewWord = " "
index = 0
for char in Word:
if char != NewWord[index]:
NewWord += char
index += 1
print(NewWord.strip())
NOTE: L'ordre est important et cette question n'est pas similaire à this one.
Utilisation de itertools.groupby
:
>>> foo = "SSYYNNOOPPSSIISS"
>>> import itertools
>>> ''.join(ch for ch, _ in itertools.groupby(foo))
'SYNOPSIS'
C'est une solution sans importer itertools:
foo = "SSYYNNOOPPSSIISS"
''.join([foo[i] for i in range(len(foo)-1) if foo[i+1]!= foo[i]]+[foo[-1]])
Out[1]: 'SYNOPSIS'
Mais c'est plus lent que les autres méthodes!
Que dis-tu de ça:
oldstring = 'SSSYYYNNNOOOOOPPPSSSIIISSS'
newstring = oldstring[0]
for char in oldstring[1:]:
if char != newstring[-1]:
newstring += char
def remove_duplicates(astring):
if isinstance(astring,str) :
#the first approach will be to use set so we will convert string to set and then convert back set to string and compare the lenght of the 2
newstring = astring[0]
for char in astring[1:]:
if char not in newstring:
newstring += char
return newstring,len(astring)-len(newstring)
else:
raise TypeError("only deal with alpha strings")
J'ai découvert cette solution avec itertools et avec la compréhension de liste, même la solution lorsque nous comparons le caractère au dernier élément de la liste ne fonctionne pas
Que diriez-vous
foo = "SSYYNNOOPPSSIISS"
def rm_dup(input_str):
newstring = foo[0]
for i in xrange(len(input_str)):
if newstring[(len(newstring) - 1 )] != input_str[i]:
newstring += input_str[i]
else:
pass
return newstring
print rm_dup(foo)
def removeDuplicate(s):
if (len(s)) < 2:
return s
result = []
for i in s:
if i not in result:
result.append(i)
return ''.join(result)