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 :

Trier une liste en fonction du nombre de caractères de chaque élément


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 73
    Points : 63
    Points
    63
    Par défaut Trier une liste en fonction du nombre de caractères de chaque élément
    Bonjour,

    Je suis coincé sur un problème qui à mon avis est simple à résoudre :
    J'ai une liste --> liste= ['Jean','Maximilien','Brigitte','Sonia','Jean- Pierre','Sandra','Alexandre'] pour l'exemple.
    Je veux créer deux listes différentes en fonction du nombre de caractères de chaque élément de la liste.
    CàD : Les éléments de moins de six caractères dans une liste "MoinsDeSix" et les autres dans une liste "PlusDeSix"
    MoinsDeSix=['Jean','Sonia']
    PlusDeSix=['Les autres éléments']
    Quelqu'un pourrait-il m'aider svp
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    Salut,
    len() te donnes la longueur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    liste= ['Jean','Maximilien','Brigitte','Sonia','Jean- Pierre','Sandra','Alexandre']
    moinsDeSix, plusDeSix = [], []
    for x in liste:
      if len(x) < 6:
        moinsDeSix.append(x)
      else:
        plusDeSix.append(x)
    C'est vite fait et il y a sans doute plus pythonesque.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 73
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par dahtah Voir le message
    Salut,
    len() te donnes la longueur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    liste= ['Jean','Maximilien','Brigitte','Sonia','Jean- Pierre','Sandra','Alexandre']
    moinsDeSix, plusDeSix = [], []
    for x in liste:
      if len(x) < 6:
        moinsDeSix.append(x)
      else:
        plusDeSix.append(x)
    C'est vite fait et il y a sans doute plus pythonesque.
    Un grand Merci pour ta réponse, je cherchais vraiment la complexité.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    J’ai trouvé ceci qui paraît plus pythonien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from itertools import groupby
     
    liste= ['Jean','Maximilien','Brigitte','Sonia','Jean-Pierre','Sandra','Alexandre']
     
    liste.sort(key=len)
    gp = groupby(liste,key=lambda x:len(x)<6)
    moinsDeSix, plusDeSix = list(gp.next()[1]),list(gp.next()[1])

    Je ne sais trop quoi en penser. Aprè coup, cela coule de source, mais il faut bien maîtriser groupby(), ce qui n’est pas encore tout à fait mon cas.

    Par exemple, j’ai d’abord essayé ce qui suit. Si quelqu’un peut m’expliquer pourquoi ça ne marche pas, j’en serai fort aise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from itertools import groupby
     
    liste= ['Jean','Maximilien','Brigitte','Sonia','Jean-Pierre','Sandra','Alexandre']
     
     
    liste.sort(key=len)
    gp = list(groupby(liste,key= lambda x:len(x)<6))
    moinsDeSix, plusDeSix = list(gp[0][1]),list(gp[1][1])
    Ou tuple() à la place de list(), c’est pareil.





    PLUS


    La solution de dahtah peut se mettre sous forme de list comprehension:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste= ['Maximilien','Sandra','Brigitte','Joy','Sonia','Jean-Pierre','Jo','Alexandre','Jean']
     
    moinsDeSix, plusDeSix = [],[]
    [ moinsDeSix.append(x) if len(x)<6 else plusDeSix.append(x) for x in liste]
    On peut aussi préférer l’ultra-simplicité, même si cela fait parcourir deux fois la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste= ['Maximilien','Sandra','Brigitte','Joy','Sonia','Jean-Pierre','Jo','Alexandre','Jean']
     
    moinsDeSix = [ x for x in liste if len(x)<6]
    plusDeSix = [ x for x in liste if len(x)>=6]
    ['Joy', 'Sonia', 'Jo', 'Jean']
    ['Maximilien', 'Sandra', 'Brigitte', 'Jean-Pierre', 'Alexandre']

    L’avantage de ces solutions est de préserver les items dans le même ordre dans les listes extraites que celui qu’ils avaient dans la liste de départ.


    Je préfère finalement ces solutions à l’utilisation un peu tortueuse de groupby()

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/02/2009, 18h44
  2. la fonction sort pour trier une liste
    Par memo07 dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/11/2007, 16h58
  3. [8.5] trier une liste en fonction de plusieurs dates
    Par Gotch59 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/06/2007, 13h52
  4. Réponses: 7
    Dernier message: 28/02/2006, 16h46
  5. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17

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