2017-05-09 9 views
-1

Können Sie diesen Python-Code erklären? Here how does L.Sort (Spaß) `Arbeit?Wie Arbeit cmp Argument auf Sortierfunktion in Python

def fun(a, b): 
    return cmp(a[1], b[1]) 

L= [[2, 1], [4, 5, 3]] 
L.sort(fun) 
print L 
+0

Ist es nicht selbsterklärend und die ganze Erklärung kann gefunden werden, indem man die Python-Dokumentation durchsucht. Sogar möglicherweise sogar hier http://stackoverflow.com/documentation/python/809/incompatibilities-moving-from-python-2-to-python-3/6139/cmp-function-removed-in-python-3#t= 201705091116364415354 –

Antwort

0

Von der offiziellen Dokumentation:

The sort() method takes optional arguments for controlling the comparisons. 

cmp specifies a custom comparison function of two arguments (list items) 
which should return a negative, zero or positive number depending on whether 
the first argument is considered smaller than, equal to, or larger than the 
second argument: cmp=lambda x,y: cmp(x.lower(), y.lower()). 
The default value is None. 

So Sie versuchen, den Vergleich mit Ihrer eigenen Funktion "Spaß" zu steuern. In diesem Beispiel werden die Werte verglichen, die im 1. Index der Listen innerhalb der Liste vorhanden sind (verschachtelte Listen). Wenn Sie versuchen, es separat zu testen, erhalten Sie -1, da die a [1] kleiner ist als b [1]
klar und damit die Ausgabe ist "[[2,1], [4,5,3]] ", die bereits sortiert

a = [2,1] 
b = [4,5,3] 
cmp(a[1], b[1]) 

Sie können es versuchen zu ändern Wert auf 1. Index etwas wie dies, und Sie werden verstehen, wie es funktioniert.

So etwas wie dieses

def fun(a,b): 
    return cmp(a[1], b[1]) 
L=[[2,6],[4,5,3]] 
L.sort(fun) 
print L 

Ich hoffe, das hilft.

+0

Wenn ich L = [1,2,3,4] verwende, habe ich eine Fehlermeldung bekommen, warum? –

+0

@SelvakumarAnushan: Ja, denn dann wird es keine verschachtelte Liste sein. Im Fall von L = [1,2,3,4] ist a [1] und b [1] nicht sinnvoll –