[Python] Trier

introduction

Quand je regardais le problème avec CodeIQ pour la première fois depuis un moment, il y avait un problème avec le tri en Python3, et à ce moment-là, j'ai appris le tri en Python3 pour la première fois, donc je l'enregistrerai ici sous forme de mémo.

* Si vous avez des erreurs ou des suggestions que vous devriez faire, nous vous serions reconnaissants si vous pouviez nous apprendre.

Tri des éléments

Trier les éléments par ordre croissant

Tout d'abord, trions les éléments de la liste par ordre croissant. La méthode utilisée est sort (). S'il s'agit d'une chaîne de caractères, elle sera triée dans l'ordre du code de caractère, et s'il s'agit d'une valeur numérique, elle sera triée par ordre croissant.

exSort01.py


wordList = ["F","A","X"]  #Liste des chaînes
numberList = [4,6,2]  #Liste des numéros

wordList.sort()
print (wordList)  #Résultat de sortie:["A","F","X"]

numberList.sort()
print (numberList)  #Résultat de sortie:[2,4,6]

Trier les éléments à l'envers

Cette fois, je vais essayer d'inverser l'ordre dans lequel les éléments sont actuellement disposés. Il utilise une méthode appelée reverse ().

exSort02.py


wordList = ["F","A","X"]  #Liste des chaînes
numberList = [4,6,2]  #Liste des numéros

wordList.reverse()
print (wordList)  #Résultat de sortie:["X","A","F"]

numberList.reverse()
print (numberList)  #Résultat de sortie:[2,6,4]

Comme vous pouvez le voir, il n'est pas trié par ordre décroissant, il n'est trié que par ordre inverse. Alors, comment trier par ordre décroissant ...

Trier les éléments par ordre décroissant

Donc, cette fois, je voudrais les organiser par ordre décroissant. Vous pouvez facilement le faire en appliquant l'apprentissage jusqu'à présent. Une procédure possible consiste à exécuter d'abord la méthode sort et à trier par ordre décroissant. Et je pense que vous pouvez le faire par ordre décroissant en exécutant la méthode «reverse».

Alors, je l'ai fait comme ça.

exSort03_01.py


wordList = ["F","A","X"]  #Liste des chaînes
numberList = [4,6,2]  #Liste des numéros

wordList.sort()
wordList.reverse()
print (wordList)  #Résultat de sortie:["X","F","A"]

numberList.sort()
numberList.reverse()
print (numberList)  #Résultat de sortie:[6,4,2]

l'a fait! Mais cependant. Deux lignes sont gênantes. Pouvez-vous en faire une ligne ... Alors, je l'ai réécrit comme ça.

exSort03_01.py


wordList = ["F","A","X"]  #Liste des chaînes
numberList = [4,6,2]  #Liste des numéros

wordList.sort(reverse=True)
print (wordList)  #Résultat de sortie:["X","F","A"]

numberList.sort(reverse=True)
print (numberList)  #Résultat de sortie:[6,4,2]

Oh! C'est fait, et c'est bien rangé en une seule ligne!

Tri de liste multidimensionnel

Je comprends le tri unidimensionnel. Ensuite, le tri multidimensionnel. Par exemple, si vous avez la liste suivante:

list = [[10,4],[3,6],[4,6],[5,0],[4,9],[2,0]]

Mettons donc cette liste par ordre croissant avec le premier élément puis par ordre croissant avec le deuxième élément

[[2,0], [5,0], [10,4], [3,6], [4,6], [4,9]] Et si vous voulez obtenir le résultat?

Ainsi, lorsque je l'ai recherché, il y avait un article intitulé "Trier par plusieurs clés", où la liste des notes des élèves était rédigée en japonais. Il a été écrit sur le fait de vouloir organiser par ordre décroissant les scores arithmétiques (l'article décrit l'ordre décroissant). Donc, j'ai fait référence à cela et j'ai écrit ce qui suit!

exSort04.py


list = [[10,4],[3,6],[4,6],[5,0],[4,9],[2,0]]
list.sort(key=lambda x:x[0])
list.sort(key=lambda x:x[1])
print (list)

Ce que cela fait, c'est essayer de trier d'abord par ordre croissant. Parmi eux, utilisez «l'expression lambda» pour sélectionner la clé du premier élément et la remonter, puis utilisez la même «expression lambda» pour sélectionner la clé du deuxième élément. Dans l'ordre croissant. peut être....

Il est utilisé lors de la création d'une fonction comme l'instruction def appelée expression lambda, et il semble que le nom vienne de Lisp ... (" [[Python] [Study] Introduction to Python (27) --lambda expression ](De http://atkonn.blogspot.jp/2008/02/python-python27-lambda.html) ”)

lambda Argument 1, Argument 2, ..., Argument N: Formula for find the answer you want to return

Il semble écrire comme ça. À propos, si vous souhaitez créer le premier élément dans l'ordre croissant, comparez le premier avec la même valeur à la deuxième valeur, et uniquement celui-là dans l'ordre croissant, vous pouvez écrire comme suit.

exSort04.py


list = [[10,4],[3,6],[4,6],[5,0],[4,9],[2,0]]
list.sort(key=lambda x:(x[0],x[1]))
print (list)

Cela semble avoir "un secret dans la fonction de comparaison standard cmp ()". Veuillez vous référer à l'article "Trier par plusieurs clés" pour cela.

Il semble qu'il existe aussi une méthode appelée sorted () pour le tri, mais cette fois c'est un bonus.

retour d'information

J'ai ajouté les commentaires du fournisseur de problèmes dès que possible. Très tôt! La réponse à la question était correcte, "Il existe un moyen d'utiliser la méthode ʻitemgetter du module ʻoperator." Qu'est-ce que c'est? !! Je l'ai cherché.

Ensuite, "9.9. Operator - opérateur standard au format de fonction" et "[Sort HOW TO](http: //docs.python .jp / 3.4 / howto / sorting.html) ”a été trouvé. Les deux contenus de l'histoire sont utiles, donc si vous ne l'avez pas encore lu, vous voudrez peut-être le lire.

Eh bien, revenons à l'histoire. Parlant de la conclusion, si vous écrivez comme suit, le travail jusqu'à présent est terminé en une seule ligne!

exSort04.py


from operator import itemgetter
list = [[10,4],[3,6],[4,6],[5,0],[4,9],[2,0]]
list.sort(key=itemgetter(1,0))
print (list)

Beau.

Cette fois, j'ai donné un exemple où la procédure n'est que deux fois, il semble donc que le nombre de lignes n'a pas diminué car il contient la phrase " from operator import itemgetter "qui appelle la méthode ʻitemgetter du module ʻoperator Cependant, si cela est fait plus de 3 fois, la quantité de description diminuera certainement. Si vous regardez le flux jusqu'à présent, vous pouvez comprendre pourquoi vous devriez écrire list.sort (key = itemgetter (1,0)), donc je vais l'expliquer. Si vous ne comprenez pas, vous pouvez le découvrir en regardant le contenu de la méthode ʻitemgetter` suivante ...?

Selon "10.3. Operator - Opérateur standard au format de fonction", la méthode ʻitemgetter` est la suivante. J'aurais aimé l'avoir.

méthode itemgetter


def itemgetter(*items):
    if len(items) == 1:
        item = items[0]
        def g(obj):
            return obj[item]
    else:
        def g(obj):
            return tuple(obj[item] for item in items)
    return g

Je vois.

Site de référence

Recommended Posts

[Python] Trier
Python #sort
Tri à bulles en Python
Tri par classe Python
[Mémo] Tri de liste Python3
Feuille de triche de tri Python
Tri personnalisé en Python3
[Python] Trier les types de collection
Trier
Trier les importations de modules Python par ordre alphabétique
Trier naturellement le chemin en Python
Ordre de tri des dict de base Python
Trier de gros fichiers avec python
Tri décroissant avec mongodb en python
Les débutants en Python organisent des sortes de bulles
Trier par date en python
À propos de Python sort () et reverse ()
python kafka
Insérer un tri
[Python] Traitement aléatoire (créer, sélectionner, trier)
Les bases de Python ⑤
Résumé Python
Notation d'inclusion Python
Technique Python
Étudier Python
Mémorandum Python
Python FlowFishMaster
Service Python
astuces python
[Python] Tri itérable selon plusieurs conditions
fonction python ①
Les bases de Python
Mémo Python
ufo-> python (3)
Notation d'inclusion Python
Installer python
Python Singleton
Les bases de Python ④
Mémorandum Python 2
mémo python
Python Jinja2
Incrément Python
atCoder 173 Python
[Python] fonction
Installation de Python
Installer Python 3.4.3.
Essayez Python
Mémo Python
Itératif Python
Algorithme Python
Python2 + mot2vec
[Python] Variables
Python sys.intern ()
Tutoriel Python
Fraction Python
underbar python C'est ce que
Résumé Python
Démarrer python
Remarque: Python