Python 3 Sortier- und Vergleichsfunktionen

In Python 3 können Sie eine Vergleichsfunktion nicht mehr an eine sortierte Funktion übergeben. In Python 3.2 können Sie jedoch functools.cmp_to_key verwenden, um dasselbe zu tun wie eine Vergleichsfunktion an eine sortierte Funktion zu übergeben. Lassen Sie uns einige Beispiele schreiben.

Schreiben wir zunächst ein Beispiel, das Ganzzahlen nach Zeichenfolgen vergleicht und sortiert.

python


from functools import cmp_to_key

def cmp(a, b):
    if a == b: return 0
    return -1 if a < b else 1
    
def cmpstr(a, b):
    return cmp(str(a), str(b))

def main():
    xs = [4, 90, -9, 12, 42]
    print(sorted(xs, key=cmp_to_key(cmpstr)))

main()

Dies ist das Ausführungsergebnis.

[-9, 12, 4, 42, 90]

Das Ergebnis des Größenvergleichs gibt -1, 0 oder 1 zurück. Gibt -1 zurück, wenn weniger, 0, wenn gleich, 1, wenn größer.

Nur in diesem Beispiel ist das Schreiben von "sortiert (xs, key = str)" dasselbe.

Jetzt, da ich weiß, wie man functools.cmp_to_key benutzt, werde ich die Sorte ausprobieren, die ich wirklich machen wollte. Ich habe eine Liste von Tupeln mit zwei Elementen und möchte diese Liste sortieren. Die Vergleichsmethode sortiert das zweite Element des Taples in aufsteigender Reihenfolge und, wenn das zweite Element gleich ist, in absteigender Reihenfolge des ersten Elements. Die Vergleichsfunktion ist wie folgt.

python


from functools import cmp_to_key

def cmp(a, b):
    if a == b: return 0
    return -1 if a < b else 1

def cmptuple(a, b):
    return cmp(a[1], b[1]) or cmp(b[0], a[0])

def main():
    xs = [(4, 90), (-9, 12), (42, 12), (100, 12), (1, 1), (-123, 1)]
    print(sorted(xs, key=cmp_to_key(cmptuple)))

main()

Dies ist das Ausführungsergebnis.

[(1, 1), (-123, 1), (100, 12), (42, 12), (-9, 12), (4, 90)]

Verknüpfung

Recommended Posts

Python 3 Sortier- und Vergleichsfunktionen
Über Python-Diktat und sortierte Funktionen
Funktionen höherer Ordnung und Einschlussnotation in Python
Python-Funktionen
Vergleich der grundlegenden Grammatik zwischen Java und Python
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Erster Python 3 ~ Erster Vergleich ~
Vorsichtsmaßnahmen beim Übergeben von def an sortierte und gruppierte Funktionen in Python? ??
# Python-Grundlagen (Funktionen)
[Anfänger] Python-Funktionen
Python Einfach zu bedienende Funktionen
Python-Grundlagen: Funktionen
Verwenden Sie Python und MeCab mit Azure-Funktionen
Korrespondenz zwischen den in Python integrierten Funktionen und Rust
R- und Python-Schreibvergleich (euklidische Methode der gegenseitigen Teilung)
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
cv2-Funktionen und Datentypen (OpenCV-Python-Bindung)
Vergleich von Python und Ruby (Environment / Grammar / Literal Edition)
Python> Nach Nummer sortieren und nach Alphabet sortieren> Sortiert verwenden ()
Sortierte Liste in Python
[Python] Komprimieren und dekomprimieren
Python-Anfängerhandbuch (Funktionen)
Python- und Numpy-Tipps
Vergleich der Ausführungszeit von Python SDP
[Python] Pip und Wheel
Funktionen und Dekorateure höherer Ordnung
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
[Python] Memo über Funktionen
Python-Eingabe und Ausgabe
Python und Ruby teilen sich
# 4 [Python] Grundlagen der Funktionen
In Python integrierte Funktion ~ Zip ~
Python Package Manager-Vergleich
Integrierte Funktionen von Wrap Python
Python asyncio und ContextVar
Anonyme Funktion und Kartenfunktion
[Einführung in die Udemy Python3 + -Anwendung] 35. Vergleichsoperatoren und logische Operatoren
[Python of Hikari-] Kapitel 06-04 Funktionen (Argumente und Rückgabewerte 3)
Experiment zum Vergleich der Schreibgeschwindigkeit von Dateien zwischen Python 2.7.9 und Pypy 2.5.0
[Ruby vs Python] Benchmark-Vergleich zwischen Rails und Flask
Ein schneller Vergleich der Testbibliotheken von Python und node.js.
[Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV
[Hikari-Python] Kapitel 06-01 Funktionen (integrierte Funktionen und Funktionsdefinitionen)
Vergleichstabelle häufig verwendeter Prozesse von Python und Clojure
Paiza Python Primer 2: Lernen Sie bedingte Verzweigungs- und Vergleichsoperatoren
[Python of Hikari-] Kapitel 06-03 Funktionen (Argumente und Rückgabewerte 2)
[Python] Kapitel 05-01 Steuerungssyntax (Vergleichsoperator und bedingte Verzweigung)
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Curry jede Funktion mit Python ....
Programmieren mit Python und Tkinter
Python> Lambda> winzige Funktionen / Rückruffunktionen
Einführung in Python-Funktionen
Python: Klassen- und Instanzvariablen
Python 2-Serie und 3-Serie (Anaconda Edition)
Python und Hardware-Verwenden von RS232C mit Python-