IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

connaître les doublons


Sujet :

Python

  1. #1
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut connaître les doublons
    Bonjour à tous,


    J'imagine qu'il y a un moyen très simple, mais je n'arrive pas à créer un liste des doublons présents dans une liste.

    J'arrive à les supprimer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    l = [1,2,3,3]
    list(set(l))
    => [1,2,3]
    Mais je voudrais faire l'inverse...c'est à dire qu'il me renvoie [3]

    Merci d'avance

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    C'est bourrin mais ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import itertools
    print list(set([ i for i in itertools.dropwhile(lambda x: l.index(x)<2, l) ]))

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Pourquoi pas plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/env python
    #coding=utf-8
     
    l = [1,2,3,3]
    doublons = list(set([x for x in l if l.count(x)>1]))
    print doublons
    Par contre, une méthode sans list(set(...)) serait plus joli et plus efficae sur de grosses liste.

  4. #4
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    peut-être un poil plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [i for i in set(l) if l.count(i) > 1]

  5. #5
    Membre éclairé Avatar de menuge
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    727
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2004
    Messages : 727
    Par défaut
    Nikel!

    Merci beaucoup pour votre rapidité!

  6. #6
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par Guigui_ Voir le message
    peut-être un poil plus simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [i for i in set(l) if l.count(i) > 1]
    Tout à fait...

  7. #7
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Toutes ces solutions à base de 'count' ont le désavantage de compter le nombre d'occurrences, c'est une information dont on n'a a priori pas besoin. On veut simplement connaître ceux qui sont en plusieurs exemplaires.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L=[1 ,2, 1 ,3, 2, 4, 5 ,6, 1]
    def doublons(L):
        return set([L[i] for i in range(0,len(L)) if L[i] in L[i+1:]])
    print doublons(L)
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  8. #8
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Citation Envoyé par Zavonen Voir le message
    Toutes ces solutions à base de 'count' ont le désavantage de compter le nombre d'occurrences...
    Suivant le contexte on aura donc le choix. Pour ma part je cherchais la méthode la plus rapide à taper.

  9. #9
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    En fonction de la forme de la liste, l'une ou l'autre méthode sera la plus efficace.

    une autre solution (mais un peu plus longue a écrire) qui devrait être plus rapide (enfin si il y a beaucoup de doublon et que la liste est grosse)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ll = list(l)
    ll.reverse()
    lenl = len(l)-1
    l3 = [i for i in set(l) if l.index(i) != lenl - ll.index(i)]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. empecher les doublons
    Par florent dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/06/2004, 15h59
  3. Connaître les differentes bases présentes
    Par Drahu dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2004, 13h31
  4. tri a bulle sans les doublons
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 10/03/2003, 16h29
  5. Réponses: 5
    Dernier message: 06/03/2003, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo