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']
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.
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]]
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]]
--Trier
sorted(a, key=lambda x:(x[i], x[j], x[k], ...)
--sort ()
est ** trié par la première ligne de base, mais pour les colonnes avec les mêmes éléments dans la première ligne, il est trié en comparant la deuxième ligne suivante **Recommended Posts