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 gUI (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 fonctionsorted()
. 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:
Conceptuellement,
sorted()
va utiliser la fonction que tu passes danskey
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 WrathOfThePixel . É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 seraf1 . Évalué à 7.
Tu peux aussi surcharger la fonction --lt-- de ta classe :
[^] # Re: Surgacharge de __lt__
Posté par WrathOfThePixel . Évalué à 3.
C'est l'approche que j'avais en tête en effet. Merci aussi
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.