[PYTHON] Lorsque vous souhaitez trier une liste multidimensionnelle sur plusieurs lignes

Temps unidimensionnel

import random
a = [random.randint(-5, 5) for _ in range(10)]
a.sort()
print('sorted: {}'.format(a))

>>      [4, -3, 0, -2, 1, 4, -1, -3, 2, 3]
sorted: [-3, -3, -2, -1, 0, 1, 2, 3, 4, 4]

Comme prévu, ils sont classés par ordre croissant. De même pour les chaînes de caractères

#Créez une liste de types de chaînes appropriée
s = [chr(random.randint(97, 97+25)) for i in range(10)]
print(s)
s.sort()
print('sorted: {}'.format(s))
>>      ['v', 'm', 'h', 'n', 'o', 'i', 'w', 'o', 'q', 'r']
sorted: ['h', 'i', 'm', 'n', 'o', 'o', 'q', 'r', 'v', 'w']

Lorsque multidimensionnel

Considérez une liste comme celle-ci comme exemple. (* À partir du scénario de test de ABC128-B)

a = [['khabarovsk', 20],
     ['moscow', 10],
     ['kazan', 50],
     ['kazan', 35],
     ['moscow', 60],
     ['khabarovsk', 40]]

Supposons que vous souhaitiez trier la première ligne de ce tableau, et si les éléments de la première ligne sont identiques, triez les nombres de la deuxième ligne dans l'ordre croissant.

Méthode 1: Jouez avec la clé d'argument trié

En spécifiant la clé comme indiqué ci-dessous, les lignes spécifiées seront triées dans l'ordre.

print(sorted(a, key=lambda x:(x[0], x[1])))
>>
[['kazan', 35], 
 ['kazan', 50], 
 ['khabarovsk', 20], 
 ['khabarovsk', 40], 
 ['moscow', 10], 
 ['moscow', 60]]

#Si vous spécifiez dans l'ordre inverse
print(sorted(a, key=lambda x:(x[1], x[0])))
>>
[['moscow', 10],
 ['khabarovsk', 20],
 ['kazan', 35],
 ['khabarovsk', 40],
 ['kazan', 50],
 ['moscow', 60]]

#Dans le cas d'une valeur numérique-Vous pouvez trier par ordre décroissant en ajoutant.
print(sorted(a, key=lambda x:(x[0], -x[1])))
>>
[['kazan', 50],
 ['kazan', 35],
 ['khabarovsk', 40],
 ['khabarovsk', 20],
 ['moscow', 60],
 ['moscow', 10]]

Méthode 2: Il suffit de trier ()

Tout d'abord, essayez d'utiliser sort () sur une liste multidimensionnelle.

b = [[chr(random.randint(97, 97+25)), random.randint(-5, 5)] for i in range(5)]
print(b)
b.sort
print('sorted: {}'.format(b))
>>
        [['r', 1], ['a', 0], ['k', -2], ['z', -2], ['g', -3]]
sorted: [['a', 0], ['g', -3], ['k', -2], ['r', 1], ['z', -2]]

Comme vous pouvez le voir, les éléments de base sont triés uniquement le long de la première ligne.

Maintenant, utilisons sort () dans le cas comme l'exemple.

a.sort()
print(a)
>>
[['kazan', 35],
 ['kazan', 50],
 ['khabarovsk', 20],
 ['khabarovsk', 40],
 ['moscow', 10],
 ['moscow', 60]]

cette? ?? Le même résultat que lorsque les clés de la méthode 1 ont été spécifiées dans l'ordre a été obtenu. La fonction de tri de python est ** essentiellement triée par la première ligne, mais il semble que les éléments de la première ligne soient triés en comparant la deuxième ligne suivante pour la même colonne **. Donc, si vous voulez faire quelque chose comme l'exemple, vous pouvez simplement utiliser sort ().

Si vous le concevez, vous pouvez le faire par ordre décroissant de valeurs numériques.

for i in a:
  i[1] = -i[1]
a.sort()
print(a)
>>
[['kazan', -50],
 ['kazan', -35],
 ['khabarovsk', -40],
 ['khabarovsk', -20],
 ['moscow', -60],
 ['moscow', -10]]

Résumé

--Trier

Recommended Posts

Lorsque vous souhaitez trier une liste multidimensionnelle sur plusieurs lignes
Lorsque vous voulez plt.save dans l'instruction for
[Linux] Lorsque vous souhaitez rechercher une chaîne de caractères spécifique dans plusieurs fichiers
[Django] Mémorandum lorsque vous souhaitez communiquer de manière asynchrone [Python3]
Lorsque vous souhaitez lancer une commande UNIX sur Python
Quand tu veux casser une ligne pendant longtemps
Lorsque vous souhaitez remplacer plusieurs caractères dans une chaîne de caractères sans utiliser d'expressions régulières dans la série python3
Un référentiel essentiel à utiliser lorsque vous souhaitez l'essayer avec ansible
Je souhaite trier une liste dans l'ordre des autres listes
[Python] Si vous souhaitez dessiner un diagramme de dispersion de plusieurs clusters
J'ai créé un programme pour vous avertir par LINE lorsque les commutateurs arrivent
Comment écrire une chaîne de caractères lorsqu'il y a plusieurs lignes en python
Convertir une liste multidimensionnelle (tableau) en une dimension
Comment se souvenir quand on oublie un mot
Que faire lorsque vous souhaitez recevoir des fichiers à distance depuis un client Windows
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
Paramètres lorsque vous souhaitez exécuter python-mecab avec travis
Lorsque vous souhaitez filtrer avec le framework Django REST
Choses à noter lors de l'initialisation d'une liste en Python
[Python] Je veux faire d'une liste imbriquée un taple
Python> Obtenir une liste de fichiers dans plusieurs répertoires> Utiliser glob | Trier par heure de modification
Opération utile lorsque vous souhaitez résoudre tous les problèmes dans plusieurs langages de programmation avec Codewars
Lorsque vous souhaitez traduire rapidement un exemple C # dans un autre langage tel que VB
Un site pour voir quand vous voulez lire un article de machine learning mais cela semble difficile
[AWS] Que faire lorsque vous souhaitez piper avec Lambda
Points à noter lors de la suppression de plusieurs éléments de la liste
Utilisez aggdraw lorsque vous voulez dessiner magnifiquement avec un oreiller
Lorsque vous souhaitez enregistrer les données initiales de Django avec des relations
Lorsque vous souhaitez utiliser plusieurs versions de la même bibliothèque Python (environnement virtuel utilisant venv)
[Sous-processus] Lorsque vous souhaitez exécuter un autre programme Python en code Python
Que faire lorsqu'une vidéo ne peut pas être lue par cv2.VideoCapture
Lorsque vous souhaitez que le thème de votre documentation Sphinx soit le même
Vous ne voulez pas dire que vous avez créé un programme de reconnaissance faciale?
[Python] Lorsque vous souhaitez utiliser toutes les variables dans un autre fichier
Si vous souhaitez affecter une exportation csv à une variable en python
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
Lorsque vous souhaitez envoyer un objet avec des requêtes à l'aide de flask
Passer la liste de Python vers C ++ par référence dans pybind11
Comment supprimer plusieurs positions (index) spécifiées dans une liste Python
Lorsque vous souhaitez ajuster l'intervalle de l'échelle de l'axe avec APLpy
Notez que vous souhaitez décorer manuellement les paramètres passés dans le formulaire du modèle Django élément par élément
Mémorandum Expression régulière Lorsqu'il y a plusieurs caractères que vous souhaitez séparer dans la chaîne de caractères
Extension de Python par C ou C ++ (lorsqu'il y a plusieurs arguments, lors du passage d'une liste du côté Python)
[Python] Tri itérable selon plusieurs conditions
Opérations clés que vous souhaitez connaître
Lors de la création d'une matrice dans une liste
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Je veux être maudit par une jolie fille à chaque fois que je sudo! !!
Lors de l'exécution d'un shell Python à partir d'Electron, transmettez plusieurs arguments pour exécuter Python.
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Lorsque vous souhaitez modifier l'en-tête HTTP du client de test de Flask
Si vous souhaitez obtenir plusieurs statistiques avec groupby of pandas v1
[Google Colab] Je souhaite afficher plusieurs images côte à côte dans une vignette
Wrapper lorsque vous souhaitez afficher la couleur utf-8 + ansi dans la console Windows
Signifie mémo lorsque vous essayez de faire de l'apprentissage automatique avec 50 images
[Python] Essayez de créer vous-même un programme de tri. (Tri sélectif, tri par insertion, tri par bulle)
[Question] Je veux gratter une chaîne de caractères entourée de balises uniques!