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 :

Question print (max(L1,key=len))


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Par défaut Question print (max(L1,key=len))
    Bonjour à tous,

    Je travaille sur un script et j'ai un soucis lors de l'affichage de mes résultats

    J'ai une liste avec différents mots, je dois afficher les mots de taille maximum. J'y arrives bien, le soucis est lorsqu'il y a plusieurs mots de même longueur:

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    L1=["trois","tabouret","un","soleil","monarque"]
    print (max(L1,key=len))
    Le script m'affiche "tabouret" alors qu'il me faudrait "tabouret" ET "monarque" qui ont tous les deux la taille maximum de la liste (taille de 8).

    Comment puis-je corriger cela ?

    Merci

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    max() renvoie un seul élément dont il faut ruser.

    La première idée que j'ai est de trouver la longueur maximale puis de récupérer les éléments de cette longueur. Ça donne un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L1 = ["trois","tabouret","un","soleil","monarque"]
    max_len = len(max(L1,key=len))
    maxs = [e for e in L1 if len(e) == max_len]
    print(maxs)

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Par défaut
    Merci c'est exactement ce que je recherche !
    Cependant dans mon fichier il ne s'agit pas de mots, mais de suite de chiffres ce qui complique encore l'affaire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L1=['66 1 4', '66 1 4 9', '66 1 4 9 6', '66 1 4 9 33']
    max_len = len(max(L1,key=len))
    maxs = [e for e in L1 if len(e) == max_len]
    print(maxs)
    Il faudrait donc que je calcule le nombre de chiffres dans chaque chaines composant ma liste et en ressortir la (ou les) chaines les plus longues...
    Il faudrait je suppose séparer chaque chiffre selon les espaces...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Amniote Voir le message
    Il faudrait je suppose séparer chaque chiffre selon les espaces...
    Exact. split() est ton ami

    Perso, je commencerais par créer une liste L2 contenant l'ensemble des nombres individualisés (ex L2=tuple(y for x in L1 for y in x.split())) puis pourrais alors appliquer à cette liste la solution de Bktero.

    Citation Envoyé par Bktero Voir le message
    ...dont il faut ruser.
    La ruse de Naheulbeuk...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par Amniote Voir le message
    Cependant dans mon fichier il ne s'agit pas de mots, mais de suite de chiffres ce qui complique encore l'affaire...
    Il suffit de remplacer len par mylen:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mylen = lambda s: len(''.join(s.split(' ')))
    L1=['66 1 4', '66 1 4 9', '66 1 4 9 6', '66 1 4 9 33']
    max_len = mylen(max(L1,key=mylen))
    maxs = [e for e in L1 if mylen(e) == max_len]
    print(maxs)
    puis eventuellement on optimise avec lru_cache

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

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Il suffit de remplacer len par mylen
    Je vois pas trop l'utilité. Ce mylen ne fait que compter les chaines dans lesquels les espaces ont été supprimés. Ca aura un effet si les chaines ont des espaces en nombre inégal comme L1=["66 1..........4", '66 1 4 9', '66 1 4 9 6', '66 1 4 9 33'] (j'ai mis des points pour représenter l'espace parce que quand je mets de vrais espaces, la mise en page du fofo les concatènes et on ne voit pas qu'il y en a plusieurs) mais dans l'exemple d'origine, ton code donne exactement le même résultat que le code de Amniote.

    Toutefois nous n'avons pas compris la même chose. Moi j'ai compris que Amniote voulait séparer chaque nombre dans des items individuels puis extraire ceux qui avaient le nb de chiffres max...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 61
    Par défaut
    Toutefois nous n'avons pas compris la même chose. Moi j'ai compris que Amniote voulait séparer chaque nombre dans des items individuels puis extraire ceux qui avaient le nb de chiffres max...
    C'est bien ça, il faut que j'affiche la chaîne (ou les si il y en a plusieurs de même longueur max) la plus longue (dans le sens ou elle contient le plus de chiffres)
    Par exemple la chaine ('6 8 15 21 22 5') a une longueur de 6 car elle contient 6 chiffres.

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

Discussions similaires

  1. Question sur les primaries key
    Par izioto dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/11/2006, 13h22
  2. ptite question de tableau (trouver le max)
    Par isidore dans le forum C
    Réponses: 6
    Dernier message: 19/11/2006, 17h15
  3. [outil] quid de "max seeks for key" et de "max write
    Par Christophe Charron dans le forum Installation
    Réponses: 2
    Dernier message: 31/03/2006, 06h01
  4. [Debutant] Question sur le system.out.print
    Par thom02 dans le forum Langage
    Réponses: 8
    Dernier message: 19/07/2005, 18h19
  5. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 16h35

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