La méthode sort() intégrée de la liste Python est utilisée pour le tri. Vous pouvez également utiliser la méthode globale sorted() intégrée de Python pour trier les séquences itérables et générer de nouvelles séquences.
1) Bases du tri
Le tri ascendant simple est très simple. Appelez simplement la méthode sorted(). Il renvoie une nouvelle liste dont les éléments sont triés en fonction de l'opérateur inférieur à (__lt__).
Le code est le suivant :
>>> sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5]
Vous pouvez également utiliser la méthode list.sort() pour trier, auquel cas la liste elle-même sera modifiée. Cette méthode est généralement moins pratique que sorted(), mais si vous n'avez pas besoin de conserver la liste d'origine, cette méthode sera plus efficace.
Le code est le suivant :
>>> a = [5, 2, 3, 1, 4] >>> a.sort() >>> a [1, 2, 3, 4, 5]
Une autre différence est que la méthode list.sort() n'est définie que dans les listes, à l'inverse, la méthode sorted() est valable pour tous les itérables séquences.
Le code est le suivant :
>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}) [1, 2, 3, 4, 5]
2) paramètres/fonctions clés
À partir de python2.4, list.sort() et trié () fonctions Le paramètre key est ajouté pour spécifier une fonction qui sera appelée avant la comparaison de chaque élément. Par exemple, la fonction spécifiée par key permet d'ignorer la casse d'une chaîne :
Le code est le suivant :
>>> sorted("This is a test string from Andrew".split(), key=str.lower) ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
La valeur du paramètre key est une fonction. un seul paramètre et renvoie une valeur pour le traitement de Compare. Cette technique est rapide car la fonction spécifiée par key sera appelée exactement pour chaque élément.
Un cas d'utilisation plus répandu consiste à utiliser certaines valeurs d'objets complexes pour trier des séquences d'objets complexes, par exemple :
Le code est le suivant :
>>> student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ] >>> sorted(student_tuples, key=lambda student: student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
La même technologie a des objets complexes avec des attributs nommés sont également applicables, par exemple :
Le code est le suivant :
>>> class Student: def __init__(self, name, grade, age): self.name = name self.grade = grade self.age = age def __repr__(self): return repr((self.name, self.grade, self.age)) >>> student_objects = [ Student('john', 'A', 15), Student('jane', 'B', 12), Student('dave', 'B', 10), ] >>> sorted(student_objects, key=lambda student: student.age) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
3) Fonction du module opérateur
Le paramètre clé ci-dessus est très utile et étendu, donc python fournit des fonctions pratiques pour rendre l'accès aux méthodes plus facile et plus rapide. Le module opérateur a des méthodes itemgetter, attrgetter et methodcaller qui ont été ajoutées depuis la version 2.6. En utilisant ces méthodes, l'opération ci-dessus deviendra plus concise et plus rapide :
Copiez le code comme suit :
>>> from operator import itemgetter, attrgetter >>> sorted(student_tuples, key=itemgetter(2)) [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] >>> sorted(student_objects, key=attrgetter('age')) [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Le module opérateur permet également un tri à plusieurs niveaux, par exemple, d'abord par niveau, puis par Trier par âge :
Copiez le code comme suit :
>>> sorted(student_tuples, key=itemgetter(1,2)) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] >>> sorted(student_objects, key=attrgetter('grade', 'age')) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
4) Ordre croissant et décroissant
Les deux list.sort() et sorted() Accepte un paramètre reverse (True ou False) pour indiquer un tri croissant ou décroissant. Par exemple, triez les élèves ci-dessus par ordre décroissant comme suit :
Copiez le code Le code est le suivant :
>>> sorted(student_tuples, key=itemgetter(2), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] >>> sorted(student_objects, key=attrgetter('age'), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!