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.
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]
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 ...
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!
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.
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.
Recommended Posts