Suprimer les doublon d'une liste en python [Résolu/Fermé]

- - Dernière réponse :  psyphi - 16 mars 2014 à 22:34
bonjour a tous
je cré dans un script une liste de lien
mon probleme est que je ne sais virer les doublons de la liste
merci pour toute aide
Afficher la suite 

6 réponses

Meilleure réponse
45
Merci
Oui il y a plus simple en une seule ligne : list(set(maliste))

>>> l = [1,2,3,4,5,4,65,43,3,4,34,54,3,4,1,3,13,1,2]
>>> list(set(l))
[1, 2, 3, 4, 5, 65, 43, 34, 13, 54]
>>>

Dire « Merci » 45

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 69661 internautes nous ont dit merci ce mois-ci

kilian
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1335 -
Ah ben oui j'y avais pas pensé. Je devrais utiliser plus souvent les ensembles.
Bonjour,

Votre solution pour supprimer les doublons marche très bien, par contre quand je l'applique, j'obtiens les résultats dans le désordre, comment faire svp ? voici mon code sous Python:

p = 'L45446'
for element in p:
p = list(set(p))
print p

j'obtiens :
['5', '4', 'L', '6']

alors que je voudrais avoir
L456

en fait, peut-être que ce n'est pas la bonne solution pour moi car je cherche à supprimer les doublons dans une chaîne de caractères, pas dans une liste et je veux qu'ensuite la chaîne résultante garde l'ordre de départ.

Je débute complètement, je suis désolée si mes questions sont très basiques.
Merci d'avance de tout aide.
raspoute
Messages postés
828
Date d'inscription
lundi 1 mai 2006
Statut
Contributeur
Dernière intervention
13 septembre 2013
58 > Lou -
Bonjour,

voilà une solution adaptée aux chaînes

p='L45446'
p1=''
for el in p:
    if el in p1:
        pass
    else:
        p1+=el
print p1

Lou352
Messages postés
1
Date d'inscription
vendredi 13 février 2009
Statut
Membre
Dernière intervention
13 février 2009
> Lou -
ne vous embêtez pas à me répondre, j'ai trouvé ma solution, merci et bonne journée à tous.

Lou
oui c bien ? mais quand ta liste contient une sous liste sa marche pas ?

Exp: G=[['1','2'],['1','2'], ['10','2']]

ni int() ni sort() ne marche aussi

dommage

j'essaye de régler ça avec des boucles, ça bug !

a+
8
Merci
Salut,sous
Pour un résultat trié il suffit de passer le résultat à sorted, comme montré ci-des :

>>> l = [1,2,3,"L","A","B","Z",4,5,4,65,43,3,"H",4,34,54,3,4,1,3,13,1,2]
>>> sorted(list(set(l)))
[1, 2, 3, 4, 5, 13, 34, 43, 54, 65, 'A', 'B', 'H', 'L', 'Z']
>>>
Messages postés
8896
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1335
5
Merci
Salut,

Il faut créer une liste secondaire qui ajoute au fur et à mesure les occurences de ta liste de liens puis tu compares. Si l'occurence existe déjà tu supprimes le premier élément doublon de ta liste de lien.

Tu peux aussi créer une variable témoin et l'utiliser dans une boucle pour faire un truc comme:
S'il ya eu des doublons dans la dernière vérification alors on recommence une vérification, sinon on arrête (comme ça si tu as des triplons, des quadriplons ou pire, ça marchera quand même).

Exemple:
# Ta liste de liens
liste=['truc','machin','bidule','truc','truc','bidule','machin','truc','bidule','bidule','truc','machin']

# La variable témoin
doublon_existe=True


while doublon_existe==True:

     # On réinitialise la variable témoin à "Faux" pour partir du fait qu'il n'ya pas encore de doublons
    doublon_existe=False

     # Liste secondaire qui ajoutera les éléments de ta liste de liens au fur et à mesure
    liste_verif=[]    

    # On parcoure ta liste de lien et on compare avec la liste secondaire
    for lien in liste:
        try:
            doublon=liste_verif.index(lien)
            liste.remove(lien)
   
             # Comme il ya un doublon, on met la variable témoin à vrai pour recommencer une vérification la prochaine fois
            doublon_existe=True
        
        # Pas de doublon pour cet élément de la liste : on ne fait rien
        except:
            pass
        
        # On ajoute le lien en cours dans la liste secondaire pour le comparer ensuite avec les prochains éléments de la liste de liens    
        liste_verif.append(lien)


print liste


Je sens que j'explique mal. Et il ya peut être plus simple. Mais ça marche....
4
Merci
Il y a plus simple :
liste=['truc','machin','bidule','truc','truc','bidule','machin','truc','bidule','bidule','truc','machin']
liste2=[]

for elt in liste:
   try:
      ind = liste2.index(elt)
   except:
      liste2.append(elt)
except doit être utilisé pour gérer les erreurs pas pour faire de la logique!
3
Merci
Pour les versions de Python sans le type set().
>>> l = [1,2,3,4,5,4,65,43,3,4,34,54,3,4,1,3,13,1,2]
>>> dict().fromkeys(l).keys()
[1, 2, 3, 4, 5, 65, 43, 34, 13, 54]
0
Merci
merci kilian
10/10