Skip to main content

Cet article et tout le monde parlent de Python, comme de nombreuses langues seniors, des fonctions d'arrangement mature Python emballées. Nous devons juste appeler la fonction d'arrangement interne, vous pouvez compléter l'arrangement. Cependant, parmi les scénarios réels, les applications de tri sont souvent plus complexes, telles que des types d'objets, de nombreux champs, nous voulons trier en fonction des champs spécifiés ou souhaitez être triés par de nombreux mots-clés, ce n'est pas une commande d'appel de fonction simple. pour le résoudre.


Premièrement,

Voir d'abord les scènes triés par le dictionnaire le plus populaire, supposons que nous ayons un dictionnaire une tableaux, il y a beaucoup d'écoles dans le dictionnaire. Nous espérons être organisés dans un domaine dans un dictionnaire, nous utilisons les données réelles pour donner un exemple:


Les enfants ici sont un type de dict, il existe trois noms, points et accusations d'âge. Supposons que nous espérons être arrangés en fonction du score, je devrais fairequelle? kids = [ {'name': 'xiaoming', 'score': 99, 'age': 12}, {'name': 'xiaohong', 'score': 75, 'age': 13}, {'name': 'xiaowang', 'score': 88, 'age': 15}]


Pour ce problème, il existe d'abord de nombreuses solutions, nous pouvons tout d'abord utiliser les fonctions anonymes mentionnées dans l'article précédent pour spécifier le tri. L'utilisation et les articles mentionnés ci-dessus sont les mêmes, nous répondons directement au code:


Dans la fonction anonyme, nous avons reçu x pour les enfants. Facteurs, c'est un dict, nous souhaitons donc affecter les écoles que nous souhaitons et vous devez utiliser les éléments d'accès à dicter, qui trouve la valeur de champ correspondant aux parenthèses. Si nous voulons organiser des mots-clés
de mots-clés

?
sorted(kids, key=lambda x: x['score'])

Introduisez d'abord de plusieurs mots-clés ou dans les données ci-dessus. Parmi les exemples ci-dessus, le score de tous les enfants est différent, le résultat des résultats est donc déterminé. Mais s'il y a deux points de tous, j'espère que les anciens rangs devant, que dois-je faire?

Nous analysons que nous analysons que les scores sont de petits à grands, mais peuvent exporter hégal. À ce stade, nous espérons comparer l'âge en fonction de la situation du score, c'est-à-dire que nous voulons trier par deux mots-clés , le premier mot-clé est le score, le deuxième mot clé est l'âge.


En raison de l'ordre de Python, c'est le type et le type de liste, cela signifie que je peux comparer directement la taille de [1, 3] et [1, 2] et Python se compare automatiquement automatiquement. la taille des éléments dans deux tableaux. S'il est automatiquement des procédures, il n'est pas égal ou fini.


Comprenez cela, c'est vraiment bien. Nous devons simplement la modifier dans des fonctions anonymes, laissez-le renvoyer les résultats pour ajouter un champ.

Rubrique

Outre les fonctions anonymes, Python a également une bibliothèque pouvant résoudre ce problème. Les fonctions anonymes utilisées et très proches sont plus faciles à utiliser. Ceci est la fonction d'itemGetter dans la bibliothèque d'exploitation. Nous pouvons voir le code directement:

Si vous êtes le mot clé, vous pouvez passer beaucoupVerrouillage:


Lundi, Obtenez l'objet

sorted(kids, key=lambda x: (x['score'], x['age']))



from operator import itemgettersorted(kids, key=itemgetter('score'))
sorted(kids, key=itemgetter('score', 'age'))


Objet

Objet class Kid: def __init__(self, name, score, age): self.name = name self.score = score self.age = age def __repr__(self): return 'Kid, name: {}, score: {}, age:{}'.format(self.name, self.score, self.age) Dispositions personnalisées, d'abord, nous écrivons dict ci-dessus:



pour faciliter l'observation de la Résultats d'impression, nous avons surchargé la méthode __RPR__ que vous devez simplement utiliser comme méthode de tôt en Java, afin que nous puissions spécifier la sortie lors de l'impression. De même, l'opérateur fournit également les fonctions de coefficient appropriées, l'utilisation, comme ItTueGetter, juste un nom différent. from operator import attrgetterkids = [Kid('xiaoming', 99, 12), Kid('xiaohong', 75, 13), Kid('xiaowang', 88, 15)]sorted(kids, key=attrgetter('score'))


Nous pouvons également utiliser des fonctions anonymes Lambda pour réaliser:
sorted(kids, key=lambda x: x.score)

Mardi, arrangé sur mesure

Ce n'est pas fini, car Il y a encore des problèmes qui peuvent se croiser. Bien que nous ayons gagné de nombreuses catégories de mots clés, il existe toujours une résolution de problèmes, qui est l'ordre de tri. Nous pouvons convertir regase = true dans les paramètres de la fonction sont agencés pour contrôler si elle a ouInverser ou non, mais si j'utilise plusieurs mots-clés, je veux suivre

ordre croissant de mots-clés, ordre décroissant Mots-clés

? Par exemple, par exemple, nous voulons décider de la différence, de l'âge ascendant, il n'ya aucun moyen de le résoudre par reprise, ce qui est le problème que le règlement actuel ne peut pas être résolu.

Que dois-je faire? À ce stade, vous avez besoin du dernier meurtre pour jouer, c'est-à-dire la définition de la définition du titre. Cela signifie que nous faisons une fonction pour déterminer la taille de l'élément, puis pour organiser appelez-nous pour terminer le tri. C'est aussi un moyen d'utiliser C ++ et Java. Les fonctions personnalisées ne sont pas difficiles à écrire, nous arriverons:


Si vous ne comprenez pas, j'ai un problème, j'ai écrit une version complète:

[
Après écrit, il n'est toujours pas terminé. Cette fonction ne peut pas être utilisée directement et il n'est pas identique à la fonction de Lambda cachée à l'avanceÓ. La fonction anonyme précédente n'est utilisée que pour indiquer le champ. Nous ne pouvons donc pas transférer cette fonction directement sur la clé et nous devons avoir une couche de traitement externe. Toutefois, cette fonction de traitement de la classe Python a également un outil prêt, nous pouvons appeler directement, il est dans fonctionnement, voir code: def cmp(kid1, kid2): return kid1.age < kid2.age if kid1.score == kid2.score else kid1.score > kid2.score


Voyons le code source dans le CMP_TO_KEY:

] Nous pouvons voir que dans la fonction interne, il ne spécifie pas une classe, puis surcharger la fonction de comparaison dans la classe et que le retour est enfin renvoyé est un nouvel objet de comparaison de fonction. Ces fonctions __LT__, __GT____ sont les fonctions de comparaison des couches de surcharge. Par exemple, __LT__ plus petit que la fonction de jugement, __ eq__ est la mâchoire égale. Par conséquent, nous pouvons directement télécharger la fonction de comparaison dans la classe Kid afin que vous puissiez l'organiser directement. La réponse est déterminée, bien sûr, nous pouvons le faire, en fait, c'est aussi une approche très courante des objets.Par rapport aux fonctions de comparaison personnalisées, nous avons tendance à être priorisées en classe. La méthode déployée dans Python est également très simple. Les paramètres intégrés dans cette fonction sont un autre objet et nous écrivons directement à la fonction. Les retours true indiquent que l'objet actuel est inférieur à celui des autres objets, sinon elle est supérieure à celle des autres objets. Nous avons joint le code complet: Après la fonction de comparaison, nous l'appelons directement, il peut être organisé sans avoir besoin d'une autre passion. Le contenu d'aujourd'hui est difficile, mais dans notre programmation quotidienne, il est souvent utilisé dans notre programmation quotidienne, souvent besoin d'organiser des objets et du contenu complexes, espérons donc que toutes les personnes ont été compétentes car elles seront utilisées. Écrire aujourd'hui sont ces choses, si vous Sensez qu'il y a quelque chose à atteindre, s'il vous plaît cliquez sur Regarder ou avancer , votre main est très importante.Pour moi.

Sujets

Catégories