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 les éléments d'une liste de listes


Sujet :

Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut trier les éléments d'une liste de listes
    Bonjour, je souhaite trier les ramifications (accompagnées de leur position) dans l'ordre alphabétique. J'ai essayé de plusieurs manières, mais en vain.

    Voici un exemple de liste à trier dans l'ordre alphabétique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste=[["méthyl",0],["éthyl", 1]]
    Et voici le résultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste=[["éthyl",1],["méthyl", 0]]
    Je vous remercie par avance de votre aide.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Tu n'as toujours pas appris à présenter un code toi . Pourtant ce n'est pas ton premier topic. Si tu es infoutue de voir comment ton "truc" ressort dans ton navigateur ; puis d'aller comparer avec ton précédent topic (auquel tu n'as jamais répondu) pour voir comment les modos l'avaient corrigé pour en tirer les conclusions qui vont bien...
    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]

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

    En globish, "trier" se dit "sort".
    Vous avez une méthode .sort pour les listes et une fonction sorted à appliquer à des itérables... et un mode d'emploi dans la documentation (traduit en français).

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

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2021
    Messages : 4
    Par défaut
    Merci beaucoup !!

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Hello,

    Vous avez une méthode .sort pour les listes et une fonction sorted à appliquer à des itérables... et un mode d'emploi dans la documentation (traduit en français).
    Sauf que là, une petite subtilité apparaît avec la comparaison sur des caractères accentués et je doute que le caractère é passe avant le m comme attendu par le PO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> ord('é')
    233
    >>> ord('m')
    109

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Sauf que là, une petite subtilité apparaît avec la comparaison sur des caractères accentués
    Cette subtilité est traitée dans la documentation dans le chapitre curiosités et conclusion.

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

  7. #7
    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,

    Pour trier des chaînes selon le dictionnaire français, voilà ce que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import locale
    locale.setlocale(locale.LC_ALL, ('fr_FR', 'UTF-8'))
     
    def convfr(chaine):
        """convertit la chaine pour la trier selon le dictionnaire français"""
        chaine2 = chaine.replace('\xA0', '') # supprime les blancs insécables
        chaine2 = chaine2.replace(' ', '') # supprime les espaces internes
        return locale.strxfrm(chaine2)
    Utilisation pour trier une liste de chaînes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste.sort(key=convfr) # tri "sur place"
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste2 = sorted(liste, key=convfr)
    Pour tester cette fonction, j'avais pris des exemples sur un site web canadien qui malheureusement n'existe plus. Voilà ces listes triées correctement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ['surélévation', 'sûrement', 'suréminent', 'sûreté']
    ['cote', 'côte', 'Côte', 'coté', 'Coté', 'côté', 'Côté', 'coter']
    ['élève', 'élevé']
    ['gène', 'gêne']
    ['MÂCON', 'maçon']
    ['pèche', 'PÈCHE', 'pêche', 'PÊCHE', 'péché', 'PÉCHÉ', 'pécher', 'pêcher']
    ['relève', 'relevé', 'révèle', 'révélé']
    ['cadurcien', 'cæcum', 'caennais', 'cæsium', 'cafard', 'coercitif', 'cœur']
    ['vice-consul', 'vicennal', 'vice-président', 'vice-roi', 'vicésimal', 'vice\xa0versa', 'vice-versa']
    ['vice-consul', 'vicennal', 'vice-président', 'vice-roi', 'vicésimal', 'vice versa', 'vice-versa']
    Pour tester chacune de ces listes, il suffit de mélanger ses chaînes avec random, d'appliquer le tri et de vérifier qu'on obtient bien l'ordre correct.

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Après je me trompe peut-être, mais l'objectif à mon sens est de transformer l'ensemble des caractères en ascii

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    importunidecode
     
    liste=[["méthyl",0],["éthyl", 1]]
     
     
    print(sorted(liste, key=lambda i: unidecode.unidecode(i[0])))

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par tyrtamos Voir le message
    Voilà ces listes triées correctement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ['cote', 'côte', 'Côte', 'coté', 'Coté', 'côté', 'Côté', 'coter']
    ['élève', 'élevé']
    ['MÂCON', 'maçon']
    ['pèche', 'PÈCHE', 'pêche', 'PÊCHE', 'péché', 'PÉCHÉ', 'pécher', 'pêcher']
    ['relève', 'relevé', 'révèle', 'révélé']
    J'ai tapé ton code mais les listes que j'ai citées dans ton post ressortent triées différemment de celles d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ['cote', 'coté', 'Coté', 'côte', 'Côte', 'côté', 'Côté', 'coter']
    ['élevé', 'élève']
    ['maçon', 'MÂCON']
    ['péché', 'PÉCHÉ', 'pèche', 'PÈCHE', 'pêche', 'PÊCHE', 'pécher', 'pêcher']
    ['relevé', 'relève', 'révélé', 'révèle']
    Voici le code que j'ai utilisé pour tester
    Code python : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/env python3
    # coding: utf-8
     
    import random
    import locale
    locale.setlocale(locale.LC_ALL, ("fr_FR", "utf-8"))
     
    def convfr(chaine):
    	"""convertit la chaine pour la trier selon le dictionnaire français"""
    	for c in ("\xA0", " "):
    		chaine=chaine.replace(c, "")
    	return locale.strxfrm(chaine)
     
    tab=(
    	["surélévation", "sûrement", "suréminent", "sûreté"],
    	["cote", "côte", "Côte", "coté", "Coté", "côté", "Côté", "coter"],
    	["élève", "élevé"],
    	["gène", "gêne"],
    	["MÂCON", "maçon"],
    	["pèche", "PÈCHE", "pêche", "PÊCHE", "péché", "PÉCHÉ", "pécher", "pêcher"],
    ["relève", "relevé", "révèle", "révélé"],
    	["cadurcien", "cæcum", "caennais", "cæsium", "cafard", "coercitif", "cœur"],
    	["vice-consul", "vicennal", "vice-président", "vice-roi", "vicésimal", "vice\xa0versa", "vice-versa"],
    	["vice-consul", "vicennal", "vice-président", "vice-roi", "vicésimal", "vice versa", "vice-versa"],
    )
     
    for t in tab:
    	t2=list(t)
    	random.shuffle(t2)
    	t2.sort(key=convfr)
    	if (t != t2): print(t, t2)
    5h42 un dimanche!!! tu es un amoureux de la pêche? ou alors tu vis dans un pays situé vachement plus à l'est que la France...
    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]

  10. #10
    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 Sve@r

    Citation Envoyé par Sve@r Voir le message
    J'ai tapé ton code mais les listes que j'ai citées dans ton post ressortent triées différemment de celles d'origine
    En fait tu as développé le code que je suggérais par:

    Pour tester chacune de ces listes, il suffit de mélanger ses chaînes avec random, d'appliquer le tri et de vérifier qu'on obtient bien l'ordre correct.
    Et j'ai le même code que toi, qui donne aussi le bon résultat.


    Citation Envoyé par Sve@r Voir le message
    5h42 un dimanche!!! tu es un amoureux de la pêche? ou alors tu vis dans un pays situé vachement plus à l'est que la France...
    A la retraite, c'est tous les jours dimanche! Ce n'est donc pas la peine de faire la grasse matinée ce jour-là. En plus, j'habite en Provence, il fait beau et il faut profiter de la journée...


    @fred1599

    J'ai relu la demande, et je n'ai pas vu qu'il fallait convertir en ascii (qui d'ailleurs n'a pas de caractères accentués => ascii étendu?). J'ai vu que tu utilisais "unidecode" qui est un module externe (=> pypi) et que je connais pas.

    A noter que s'il s'agissait de supprimer les caractères accentués (ou plutôt "signes diacritiques" puisqu'il y a aussi "ç", "æ", "œ" et les versions en majuscules), voilà ce que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from unicodedata import normalize
    def supaccents(chaine):
        """Supprime les accents de la chaine de caractères donnée (unicode)
        """
        return normalize('NFD', chaine).encode('ascii', 'ignore').decode()
    Exemple d'utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alpha = "aAàÀâÂäÄåÅæÆbBcCçÇdDeEéÉèÈêÊëËfFgGhHiIîÎïÏjJkKlLmMnNoOôÔöÖœŒpPqQrRsStTuUùÙûÛüÜvVwWxXyYÿŸzZ"
    print(supaccents(alpha))
    aAaAaAaAaAbBcCcCdDeEeEeEeEeEfFgGhHiIiIiIjJkKlLmMnNoOoOoOpPqQrRsStTuUuUuUuUvVwWxXyYyYzZ

  11. #11
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Bonjour Tyrtamos,

    Si je suis ce topic -> https://www.developpez.net/forums/d2...-condition-if/
    supprimer les accents devraient largement être suffisant.

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Après je me trompe peut-être, mais l'objectif à mon sens est de transformer l'ensemble des caractères en ascii
    L'objectif est juste de trier les listes de la liste [ ["méthyl",0], ["éthyl", 1] ] suivant leur premier éléments.

    "transformer l'ensemble des caractères en ascii" est un des moyens d'y arriver si on a de bonnes raisons pour ne pas appliquer la solution documentée pour le faire.

    Et quitte à proposer une solution autant montrer comment l'appliquer à l'exemple de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> liste=[["méthyl",0],["éthyl", 1]]
    >>> import locale
    >>> locale.setlocale(locale.LC_ALL, "")
    'French_France.1252'
    >>> liste.sort(key=lambda x: locale.strxfrm(x[0]))
    >>> liste
    [['éthyl', 1], ['méthyl', 0]]
    >>>
    ou attendre les questions du PO...

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

  13. #13
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    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 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Et j'ai le même code que toi, qui donne aussi le bon résultat.
    Oui mais comme ton post sous-entendait que les listes données en exemple étaient déjà correctement triées ; et que le tri de ces mêmes listes ne donnait pas le même résultat que les listes initiales...
    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]

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    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 : 4 060
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locale.setlocale(locale.LC_ALL, "")
    Donc si je comprend bien, cela va dépendre de la langue utilisée sur le système d'exploitation de l'utilisateur...

    Si un utilisateur utilise ce code avec un système d'exploitation dont la langue est réglée à Anglais, cela fonctionnera-t-il toujours ?

  15. #15
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Donc si je comprend bien, cela va dépendre de la langue utilisée sur le système d'exploitation de l'utilisateur...
    C'est ce que je veux. Si on veut autre chose, on peut le demander (comme dans l'exemple de Tyrtamos).
    Et si vous avez des questions au sujet de locale, ouvrez une discussion (après avoir pris le temps de lire la documentation).

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

Discussions similaires

  1. Scroll sur un tableau en conservant les titres a leur position initiale
    Par top_eagle dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 17/02/2009, 15h10
  2. [OpenOffice][Texte] Bug avec les titres et leur affichage dans le navigateur
    Par 12monkeys dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 13/07/2007, 13h44
  3. Réponses: 4
    Dernier message: 23/05/2007, 11h07
  4. Trier les objets selon leur distance
    Par comme de bien entendu dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 16/03/2006, 15h10
  5. Réponses: 1
    Dernier message: 20/12/2005, 19h50

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