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 :

Tri de liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut Tri de liste
    Bonjour,

    J'ai une liste de ce type :
    [("chaineX", "chaineY", [sous-liste de chainesZ])]

    [("toto", "bobo", ["nono", "coco", "dodo"]), ("GagA", "daDa", ["haha", papa"]), (...)]

    Je voudrais la trier par ordre alphabétique suivant X et insensible à la casse

    si je fais simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sorted (maListe, key=str.lower)
    j'ai logiquement une erreur puisque chaque élément de ma liste est composée.

    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sorted (maListe, key=lambda a: a[0].lower)
    mais ma liste est mal triée.

    Comment puis-je faire ?

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Qu'appelles-tu "liste mal triée"? (donne un exemple)

    Tyrtamos

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    Bonjour,

    L'ordre des éléments est changé par rapport à l'ordre brut (initial, sans tri).

    La liste contient plusieurs milliers d'éléments, voici les premiers éléments retournés après avoir appliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sorted (maListe, key=lambda a: a[0].lower)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    _LoadProfile
    _CloseJoypad
    _gtkVersionGtk
    _gtkVersionGLib
    _gtkVersionGPix
    _gtkMainQuit
    _gtkMainLevel
    destroyGloveObj
    _OpenJoypad
    Elle n'est pas triée comme je le souhaitais

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par _iri_ Voir le message
    Elle n'est pas triée comme je le souhaitais
    Et tu la souhaiterais comment?

    Tyrtamos

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    Je la souhaiterais alphabétiquement triée (tri insensible à la casse) :

    Pour l'exemple donnée, ce serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    _CloseJoypad
    _gtkMainLevel
    _gtkMainQuit
    _gtkVersionGLib
    _gtkVersionGPix
    _gtkVersionGtk
    _LoadProfile
    _OpenJoypad
    destroyGloveObj
    Note : l'underscore peut être avant ou après (ici, destroyGloveObj en premier ou en dernier), cela ne m'importe pas

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Hi,

    Il faut utiliser cmp() dans ces cas là.

    l'utilisation classique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    # -*- coding utf-8 -*-
     
    myList = [("_gtkVersionGLib", "bobo", ["nono", "coco", "dodo"]),
                ("_CloseJoypad", "bobo", ["nono", "coco", "dodo"]),
                ("_gtkVersionGtk", "bobo", ["nono", "coco", "dodo"]), 
                ("destroyGloveObj", "bobo", ["nono", "coco", "dodo"]),
                ("_gtkVersionGPix", "bobo", ["nono", "coco", "dodo"]),
                ("_OpenJoypad", "bobo", ["nono", "coco", "dodo"]),
                ("_gtkMainLevel", "bobo", ["nono", "coco", "dodo"]), 
                ("_LoadProfile", "bobo", ["nono", "coco", "dodo"]),
                ("_gtkMainQuit", "bobo", ["nono", "coco", "dodo"])]
     
    myList.sort(cmp=lambda x, y: cmp(x[0].lower(), y[0].lower()))
     
    for i in myList:
        print i
    vincent@tiemoko:~/Bureau$ python compare.py
    ('_CloseJoypad', 'bobo', ['nono', 'coco', 'dodo'])
    ('_gtkMainLevel', 'bobo', ['nono', 'coco', 'dodo'])
    ('_gtkMainQuit', 'bobo', ['nono', 'coco', 'dodo'])
    ('_gtkVersionGLib', 'bobo', ['nono', 'coco', 'dodo'])
    ('_gtkVersionGPix', 'bobo', ['nono', 'coco', 'dodo'])
    ('_gtkVersionGtk', 'bobo', ['nono', 'coco', 'dodo'])
    ('_LoadProfile', 'bobo', ['nono', 'coco', 'dodo'])
    ('_OpenJoypad', 'bobo', ['nono', 'coco', 'dodo'])
    ('destroyGloveObj', 'bobo', ['nono', 'coco', 'dodo'])
    L'utilisation d'une lambda dans cmp() permet des tri plus complexes que ceci.

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    'key' est tout à fait suffisant, il manquait seulement une paire de parenthèses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sorted (maListe, key=lambda a: a[0].lower())

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

Discussions similaires

  1. Requête, tri sur liste de choix
    Par seb.kepka dans le forum Access
    Réponses: 1
    Dernier message: 15/05/2006, 14h47
  2. Algo de tri par liste chainée
    Par Treuze dans le forum C
    Réponses: 3
    Dernier message: 30/12/2005, 14h05
  3. quel est le meilleur algo de tri de liste ?
    Par sony351 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 24/07/2005, 02h00
  4. [langage] tri avancé, liste de listes
    Par schnecke dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2004, 14h00
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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