web-dev-qa-db-fra.com

Python: Meilleur moyen de supprimer le caractère en double de la chaîne

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.

12
Rahul Patil

Utilisation de itertools.groupby :

>>> foo = "SSYYNNOOPPSSIISS"
>>> import itertools
>>> ''.join(ch for ch, _ in itertools.groupby(foo))
'SYNOPSIS'
17
falsetru

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!

4
G M

Que dis-tu de ça:

oldstring = 'SSSYYYNNNOOOOOPPPSSSIIISSS'
newstring = oldstring[0]
for char in oldstring[1:]:
    if char != newstring[-1]:
        newstring += char    
2
Elliott
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

1
Espoir Murhabazi

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)
0
rrao
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)  
0
jtu