70 votes

Supprimer les caractères en double d'une chaîne

Comment supprimer les caractères en double d'une chaîne à l'aide de Python ? Par exemple, disons que j'ai une chaîne :

 foo = 'mppmt'

Comment puis-je faire la chaîne:

 foo = 'mpt'

REMARQUE : La commande n'est pas importante

45voto

DSM Points 71975

Si l' ordre est important, que diriez - vous:

 >>> foo = 'mppmt'
>>> ''.join(sorted(set(foo), key=foo.index))
'mpt'

13voto

kev Points 41855

Si l'ordre n'est pas le problème :

 >>> foo='mppmt'
>>> ''.join(set(foo))
'pmt'

Pour conserver la commande :

 >>> foo='mppmt'
>>> ''.join([j for i,j in enumerate(foo) if j not in foo[:i]])
'mpt'

6voto

Soudipta Dutta Points 109

Créez une liste en Python et également un ensemble qui n'autorise aucun doublon. Solution1 :

 def fix(string):
    s = set()
    list = []
    for ch in string:
        if ch not in s:
            s.add(ch)
            list.append(ch)

    return ''.join(list)        

string = "Protiijaayiiii"
print(fix(string))

Méthode 2 :

 s = "Protijayi"

aa = [ ch  for i, ch in enumerate(s) if ch not in s[:i]]
print(''.join(aa))

3voto

Eugene Berezin Points 49

Comme mentionné, " .join(set(foo)) et collections.OrderedDict feront l'affaire. Un foo = foo.lower () ajouté au cas où la chaîne contient des caractères majuscules et minuscules et que vous devez supprimer TOUS les doublons, qu'il s'agisse de caractères majuscules ou minuscules.

 from collections import OrderedDict
foo = "EugeneEhGhsnaWW"
foo = foo.lower()
print "".join(OrderedDict.fromkeys(foo))

imprime eugnhsaw

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X