Forum Programmation.python [Résolu] Indiquer quelle donnée d'une classe doit servir pour le tri avec sorted()

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
16
sept.
2024

Bien le salut !

Je cherche à faire un truc en python et je trouve pas comment.

soit Moule la classe telle que:

class Moule:
   def __init__(self, numero: int, nom: str):
      self.numero = numero
      self.nom = nom

et plus loin dans le code, après avoir remplis une liste de moules dûment numérotées:

list_of_moules = sorted(list_of_moules)

Comment je fais pour indiquer que sorted() doit me trier les moules par leurs numéro ?

Si plutôt qu'un bout de code tout fait, quelqu'un veut bien prendre trois lignes pour m'expliquer le concept derrière et pointer vers une doc, que sa barbe de libriste soit bénie sur douze générations.

D'avance merci :)

  • # ChatGPT

    Posté par  (Mastodon) . Évalué à 4. Dernière modification le 16 septembre 2024 à 08:08.

    J'ai simplement copié/collé ton message, voici sa réponse. Je laisse les Pythoneux confirmer ou infirmer (indispensable dès qu'on utilise ChatGPT).


    Pour trier des objets de ta classe personnalisée Moule, il te faut utiliser le paramètre key de la fonction sorted(). Ce paramètre permet de spécifier une fonction qui sera appliquée à chaque élément de la liste pour déterminer sur quel critère le tri doit être fait.

    Dans ton cas, tu veux trier par l'attribut numero, donc tu passeras une fonction lambda qui retourne cet attribut pour chaque objet Moule.

    Exemple:

    list_of_moules = sorted(list_of_moules, key=lambda moule: moule.numero)

    Conceptuellement, sorted() va utiliser la fonction que tu passes dans key pour comparer les éléments de la liste. Ici, lambda moule: moule.numero est une petite fonction anonyme qui prend un objet Moule et retourne sa valeur de numero.

    Pour aller plus loin, tu peux regarder la doc officielle de sorted() ici. Elle couvre tout ce qui concerne les tris en Python, avec des exemples concrets.

    Tu as ta bénédiction de libriste !

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: ChatGPT

      Posté par  . Évalué à 1.

      Je sais pas pourquoi, je m'étais convaincu que c'était dans la classe que ça se jouait, j'avais pas une doc aussi précise de sorted() avec exemples à la clé.

      Merci

  • # Surgacharge de __lt__

    Posté par  . Évalué à 7.

    Tu peux aussi surcharger la fonction --lt-- de ta classe :

    def __lt__(self, other):
        return self.numero < other.numero

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.