[PYTHON] Wenn Sie eine mehrdimensionale Liste nach mehreren Zeilen sortieren möchten

Eindimensionale Zeit

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']

Wenn mehrdimensional

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.

Methode 1: Spielen Sie mit dem sortierten Argumentschlüssel

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]]

Methode 2: Nur sort () ist genug

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]]

Zusammenfassung

--Sortieren

Recommended Posts

Wenn Sie eine mehrdimensionale Liste nach mehreren Zeilen sortieren möchten
Wenn Sie in der for-Anweisung plt.save möchten
[Linux] Wenn Sie aus mehreren Dateien nach einer bestimmten Zeichenfolge suchen möchten
[Django] Memorandum, wenn Sie asynchron kommunizieren möchten [Python3]
Wenn Sie einen UNIX-Befehl in Python ausführen möchten
Wenn Sie eine Linie für eine lange Zeit brechen möchten
Wenn Sie mehrere Zeichen in einer Zeichenfolge ersetzen möchten, ohne reguläre Ausdrücke in der Python3-Serie zu verwenden
Ein Gist-Repository, das Sie verwenden können, wenn Sie es mit ansible ausprobieren möchten
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
[Python] Wenn Sie ein Streudiagramm mehrerer Cluster zeichnen möchten
Ich habe ein Programm erstellt, um Sie per LINE zu benachrichtigen, wenn Schalter eintreffen
So schreiben Sie eine Zeichenfolge, wenn Python mehrere Zeilen enthält
Konvertieren Sie eine mehrdimensionale Liste (Array) in eine Dimension
Wie man sich erinnert, wenn man ein Wort vergisst
Was tun, wenn Sie Dateien remote von einem Windows-Client empfangen möchten?
[Python] Ich möchte nur den Index verwenden, wenn ich eine Liste mit einer for-Anweisung schleife
Einstellungen, wenn Sie Python-Mecab mit Travis ausführen möchten
Wenn Sie mit dem Django REST-Framework filtern möchten
Beachten Sie beim Initialisieren einer Liste in Python
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Python> Eine Liste der Dateien in mehreren Verzeichnissen abrufen> Glob verwenden | Nach Änderungszeit sortieren
Nützliche Operation, wenn Sie alle Probleme in mehreren Programmiersprachen mit Codewars lösen möchten
Wenn Sie ein C # -Beispiel schnell in eine andere Sprache wie VB übersetzen möchten
Eine Website, auf der Sie sehen können, wann Sie ein Papier zum maschinellen Lernen lesen möchten, das jedoch schwierig zu sein scheint
[AWS] Was tun, wenn Sie mit Lambda pfeifen möchten?
Zu beachtende Punkte beim Löschen mehrerer Elemente aus der Liste
Verwenden Sie aggdraw, wenn Sie mit Kissen schön zeichnen möchten
Wenn Sie die Anfangsdaten von Django mit Relationen registrieren möchten
Wenn Sie mehrere Versionen derselben Python-Bibliothek verwenden möchten (virtuelle Umgebung mit venv)
[Unterprozess] Wenn Sie ein anderes Python-Programm in Python-Code ausführen möchten
Was tun, wenn ein Video von cv2.VideoCapture nicht gelesen werden kann?
Wenn Sie möchten, dass das Thema Ihrer Sphinx-Dokumentation dasselbe ist
Wollen Sie nicht sagen, dass Sie ein Gesichtserkennungsprogramm erstellt haben?
[Python] Wenn Sie alle Variablen in einer anderen Datei verwenden möchten
Wenn Sie einer Variablen in Python einen CSV-Export zuweisen möchten
Ich möchte eine Parameterliste aus CloudFormation-Code (yaml) erstellen.
Wenn Sie ein Objekt mit Anforderungen mithilfe der Flasche senden möchten
Übergeben Sie die Liste von Python an C ++ als Referenz in pybind11
So löschen Sie mehrere angegebene Positionen (Indizes) in einer Python-Liste
Wenn Sie das Intervall der Achsenskala mit APLpy anpassen möchten
Beachten Sie, dass Sie die im Django-Vorlagenformular übergebenen Parameter Element für Element manuell dekorieren möchten
Memorandum Regulärer Ausdruck Wenn die Zeichenfolge mehrere Zeichen enthält, die Sie trennen möchten
Erweiterung von Python um C oder C ++ (wenn es mehrere Argumente gibt, wenn eine Liste von der Python-Seite übergeben wird)
[Python] Sortierbar nach mehreren Bedingungen sortieren
Wichtige Operationen, die Sie wissen möchten
Beim Erstellen einer Matrix in einer Liste
Wenn Sie es so verwenden möchten, wie es ist, wenn Sie es mit Lambda-Memo verwenden
Ich möchte jedes Mal, wenn ich sudo bin, von einem hübschen Mädchen verflucht werden! !!
Übergeben Sie beim Ausführen einer Python-Shell von Electron mehrere Argumente, um Python auszuführen.
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Wenn Sie den HTTP-Header des Testclients von Flask ändern möchten
Wenn Sie mehrere Statistiken mit groupby of pandas v1 erhalten möchten
[Google Colab] Ich möchte mehrere Bilder nebeneinander in einer Kachel anzeigen
Wrapper, wenn Sie utf-8 + ansi color in der Windows-Konsole ausgeben möchten
Bedeutet Memo, wenn versucht wird, maschinelles Lernen mit 50 Bildern durchzuführen
[Python] Versuchen Sie, selbst ein Sortierprogramm zu erstellen. (Selektive Sortierung, Sortierung einfügen, Blasensortierung)
[Frage] Ich möchte eine Zeichenkette kratzen, die von eindeutigen Tags umgeben ist!