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]
Wie erwartet sind sie in aufsteigender Reihenfolge angeordnet. Ähnliches gilt für Zeichenketten
#Erstellen Sie eine entsprechende Str-Typ-Liste
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']
Betrachten Sie eine solche Liste als Beispiel. (* Aus dem Testfall von ABC128-B)
a = [['khabarovsk', 20],
['moscow', 10],
['kazan', 50],
['kazan', 35],
['moscow', 60],
['khabarovsk', 40]]
Angenommen, Sie möchten die erste Zeile dieses Arrays sortieren. Wenn die Elemente der ersten Zeile identisch sind, sortieren Sie die Zahlen in der zweiten Zeile in aufsteigender Reihenfolge.
Durch Angabe des Schlüssels wie unten gezeigt werden die angegebenen Zeilen der Reihe nach sortiert.
print(sorted(a, key=lambda x:(x[0], x[1])))
>>
[['kazan', 35],
['kazan', 50],
['khabarovsk', 20],
['khabarovsk', 40],
['moscow', 10],
['moscow', 60]]
#Wenn Sie in umgekehrter Reihenfolge angeben
print(sorted(a, key=lambda x:(x[1], x[0])))
>>
[['moscow', 10],
['khabarovsk', 20],
['kazan', 35],
['khabarovsk', 40],
['kazan', 50],
['moscow', 60]]
#Im Falle eines numerischen Wertes-Sie können in absteigender Reihenfolge sortieren, indem Sie hinzufügen.
print(sorted(a, key=lambda x:(x[0], -x[1])))
>>
[['kazan', 50],
['kazan', 35],
['khabarovsk', 40],
['khabarovsk', 20],
['moscow', 60],
['moscow', 10]]
Versuchen Sie zunächst, sort () in einer mehrdimensionalen Liste zu verwenden.
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]]
Wie Sie sehen können, werden die Grundlagen nur entlang der ersten Zeile sortiert.
Verwenden wir nun in dem Fall wie im Beispiel sort ()
.
a.sort()
print(a)
>>
[['kazan', 35],
['kazan', 50],
['khabarovsk', 20],
['khabarovsk', 40],
['moscow', 10],
['moscow', 60]]
Das? ?? Ich habe das gleiche Ergebnis erhalten, als ich die Schlüssel von Methode 1 der Reihe nach angegeben habe. Die Sortierfunktion von Python ist ** grundsätzlich nach der ersten Zeile sortiert, aber es scheint, dass die Elemente der ersten Zeile durch Vergleichen der nächsten zweiten Zeile für dieselbe Spalte ** sortiert werden. Wenn Sie also so etwas wie das Beispiel machen möchten, können Sie einfach sort () verwenden.
Wenn Sie es entwickeln, können Sie es in absteigender Reihenfolge der numerischen Werte tun.
for i in a:
i[1] = -i[1]
a.sort()
print(a)
>>
[['kazan', -50],
['kazan', -35],
['khabarovsk', -40],
['khabarovsk', -20],
['moscow', -60],
['moscow', -10]]
--Sortieren
sorted(a, key=lambda x:(x[i], x[j], x[k], ...)
--sort ()
wird ** nach der grundlegenden ersten Zeile sortiert, aber für Spalten mit denselben Elementen in der ersten Zeile wird es durch Vergleichen der nächsten zweiten Zeile sortiert **