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 :

Filtrer des sous_listes qui se répètent dans une liste


Sujet :

Python

  1. #21
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Je n'avais pas chercher des résultats
    Oh oui je sais, c'est juste une info

    Ps: Lors d'autres tests j'avais constater que while et 'plus long' que for. A confirmer.
    Je confirme, c'est 2 fois plus lent
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 17
    Points
    17
    Par défaut Simple
    lepuree=dict(ldata).items()

  3. #23
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    J'adore.
    Merci d'utiliser le forum pour les questions techniques.

  4. #24
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    analyse de la fonction rambc :
    temps : 10.79 secondes
    analyse de la fonction tyrtamos_while :
    temps : 13.1 secondes
    analyse de la fonction MClaveau :
    temps : 16.979999999999997 secondes
    analyse de la fonction tyrtamos :
    temps : 23.140000000000008 secondes
    analyse de la fonction pausekawa :
    temps : 33.08999999999999 secondes
    analyse de la fonction fred1599 :
    temps : 41.05 secondes
    analyse de la fonction yoshik :
    temps : 73.14 secondes
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #25
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lepuree=dict(ldata).items()
    C'est une solution très élégante pour traiter les exemples donnés, mais il faut impérativement que dans les couples, les 2 éléments soient identiques (comme ('a','a')).

    En effet, dans la conversion en dict, le couple ('x','y') est transformé en {'x':'y'}. Donc, s'il y a des couples comme [('a','b'),('a','c')], alors ce sont les doublons de clés qui seront éliminés => [('a','c')]

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #26
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Oui, cela ne s'applique qu'à des paires mais c'est frais et répond à l'exemple de la question d'origine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maListe = [[a,a], [b,b], [a,a], [b,b]]
    Ceci dit quel intérêt d'avoir des listes de paires ?
    est bien plus simple (et set fonctionne).
    Erreur d'énoncé ? C'est a kali38 de nous dire.

    Pour moi cela répond à la question (et uniquement dans ce cas).

    @+
    Merci d'utiliser le forum pour les questions techniques.

  7. #27
    Membre chevronné

    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
    Points : 1 752
    Points
    1 752
    Par défaut
    Bonjour.

    Que de réponses pour une question a priori simple...

    J'ai deux questions :
    1. Comment la liste est-elle construite ? Souvent on oublie que l'on peut lors de la fabrication de la liste se charger des doublons.
    2. Quelle est la taille de la liste ? Pour de grandes listes, il existe une tactique : faire une liste de sous-liste, lesquelles sous-listes ont des points en commun. Ses points communs sont à définir au cas par cas.

  8. #28
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai une nouvelle proposition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    liste = [['a','a'], ['a','a'], ['a','a'], ['b','b'], ['a','a'], ['b','b']]
     
    x = list({tuple(elem) for elem in liste})
     
    print x
    [('a', 'a'), ('b', 'b')]
    set fonctionne bien pour éliminer les doublons, mais pas avec les listes (non-hashables) comme l'avait dit wiztricks. Il suffit donc de convertir les couples en tuples. En utilisant en plus un "set compréhension" (grâce aux accolades).

    Si on veut retrouver une liste de listes, et pas une liste de tuples, une simple "list compréhension" le fera très bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    y = [list(elem) for elem in x]
     
    print y
    [['a', 'a'], ['b', 'b']]
    On peut même regrouper l'ensemble pour tout faire en une seule ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    z = [list(elem2) for elem2 in {tuple(elem1) for elem1 in liste}]
     
    print z
    [['a', 'a'], ['b', 'b']]
    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #29
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    J'ai une nouvelle proposition:
    En fait non, ma 1ère proposition est identique
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #30
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    En fait non, ma 1ère proposition est identique
    Effectivement, je ne l'avais pas vue: désolé!

    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  11. #31
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Mais il n'y a pas de mal
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  12. #32
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par rambc Voir le message
    Que de réponses pour une question a priori simple...
    Ben en fait... Pour une fois qu'on arrive a comprendre la question...

    @tyrtamos: Ok pour le set compréhension mais cela limite le code à Python 2.7 et plus. Dommage.
    Merci d'utiliser le forum pour les questions techniques.

  13. #33
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Voui, enfin, si on n’a pas le set comprehension, on utilise set() sur une list comprehension*:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    liste = [['a','a'], ['a','a'], ['a','a'], ['b','b'], ['a','a'], ['b','b']]
    z = [list(elem2) for elem2 in set([tuple(elem1) for elem1 in liste])]
    print z



    [EDIT] On peut même utiliser frozenset, vu qu’on ne modifie pas le set. Mais comme ça ne semble avoir aucun effet sur les perfs…

    [EDIT2] Bon, ben oui, c’était déjà donné au début… Je me demande qui a jeté un sort à ce post pour qu’il se développe comme ça, alors que la première réponse de rambc était suffisante, en fait…

  14. #34
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par rambc Voir le message
    Que de réponses pour une question a priori simple...
    La question n'est pas "si" simple.

    Elle est un peu "compliquée" par la représentation:
    • [['a','a'], ['a','a'], ['a','a'], ['b','b'], ['a','a'], ['b','b']]
    qui n'apporte pas plus d'infos que les représentations:
    • [ 'aa', 'aa', 'aa', 'bb', 'aa', 'bb']
    • [ ('a','a'), ('a','a'), ('a','a'), ('b','b'), ('a','a'), ('b','b')]

    En gros les représentations se ressemblent.

    Cependant, prenons une suite:
    • [ ('a','a'), ('a','a'), ('a','a'), ('b','b'), ('a','a'), ('b','b')]
    • appliquons X à chacun de ses éléments:
      [ X('a','a'), X('a','a'), X('a','a'), X('b','b'), X('a','a'), X('b','b')]

    Si X est une fonction: i = j => X(i) = X(j), chouette!
    Une fonction, un objet... on n'est pas si loin.

    Remplaçons X par list, str, tuple, un callable quelconque,...
    Dédupliquez... Le "Si" devient indécis.

    Cordialement
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #35
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Voui, enfin, si on n’a pas le set comprehension, on utilise set() sur une list comprehension*:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    liste = [['a','a'], ['a','a'], ['a','a'], ['b','b'], ['a','a'], ['b','b']]
    z = [list(elem2) for elem2 in set([tuple(elem1) for elem1 in liste])]
    print z
    Sans doute.
    C'est le sujet juste au dessus (Pas de panique, j'ai effacer un post identique ).

    Citation Envoyé par rambc Voir le message
    1. Comment la liste est-elle construite ? Souvent on oublie que l'on peut lors de la fabrication de la liste se charger des doublons.
    34 posts sans réponse/réaction de kali38.
    Je pense que nous devrions attendre.

    @+

    Edit:
    Citation Envoyé par PauseKawa Voir le message
    Ceci dit quel intérêt d'avoir des listes de paires ?
    est bien plus simple (et set fonctionne).
    Erreur d'énoncé ? C'est a kali38 de nous dire.
    Plus de code kali38 svp.
    Merci d'utiliser le forum pour les questions techniques.

  16. #36
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 105
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Une question me taraude...
    J'ai bien regardé la doc, mais je me sens un peu, disons... perplexe.
    D'habitude, il y a toujours l'un d'entre vous pour proposer une méthode à base de regex.
    Là, silence radio. Est-ce que par hasard ce ne serait pas possible ?
    J'ai eu l'impression que le problème serait de déterminer quelle sous-liste extraire automatiquement sans la désigner nommément et de rechercher ensuite un doublon éventuel...

    C'est quelque chose qui me tente depuis longtemps, cet apprentissage, mais ça n'a pas l'air d'être bien simple.

    Cordialement à tous..

    @+

  17. #37
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    En général les regex sont utilisés pour faire une recherche sur des Strings et non des listes, d'où une utilisation inadaptée.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  18. #38
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Euuuhhh… Comment dire… Les regex, c’est pour du texte*!

    Là, on travaille sur une liste de listes, donc si on voulait utiliser les regex, ’faudrait la convertir en texte, appliquer la regex (avec un parsing partiel…), et reconvertir en liste –*bonjours le travail*!

    Les regex sont un outil formidable, mais il faut savoir en user à bon escient*!

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 105
    Points : 67
    Points
    67
    Par défaut
    ok ! D'accord

    Pas vu ça !

    Merci

  20. #40
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Rien n’empêche d'y jeter un œil

    Edit:
    str(liste) A toi de jouer yoshik. Cela fait un but plutôt sympa.
    Merci d'utiliser le forum pour les questions techniques.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/07/2014, 13h21
  2. Réponses: 0
    Dernier message: 07/11/2013, 15h39
  3. Réponses: 1
    Dernier message: 09/04/2011, 15h08
  4. Réponses: 3
    Dernier message: 18/11/2008, 09h38
  5. Réponses: 13
    Dernier message: 27/11/2007, 11h06

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