2012-10-09 11 views
10

Eventuali duplicati:
Syntax behind sorted(key=lambda :)Uso ordinati() in Python

stavo attraversando il e sono imbattuto in questo esempio:

> student_tuples = [ 
     ('john', 'A', 15), 
     ('jane', 'B', 12), 
     ('dave', 'B', 10), ] 

> sorted(student_tuples, key=lambda student: student[2]) # sort by age 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 

Quello che don' t capisci cosa sono Lambda e studente qui? Possono essere sostituiti da altri nomi? E cosa fa il : in student:student[2]? È un po 'ambiguo poiché non l'ho mai visto prima.

risposta

27

semantico, questo:

print sorted(student_tuples, key=lambda student: student[2]) 

è lo stesso di questo:

def sort_key(student): 
    return student[2] 

print sorted(student_tuples, key=sort_key) 

lambda fornisce solo una sintassi alternativa a definizione di funzione. Il risultato è un oggetto funzione, proprio come quello creato da def. Tuttavia, ci sono alcune cose che le funzioni lambda non possono fare - come la definizione di nuove variabili. Sono buoni (dipende da chi chiedi) per la creazione di piccole funzioni monouso, come questo.

Una volta capito questo, allora tutto ciò che dovete sapere è che key accetta una funzione, le chiamate su ogni valore nella sequenza passato a sorted, e ordina i valori secondo l'ordine che i loro corrispondenti key valori avrebbero preso se sono stati ordinati da soli.

+1

Grazie mille. –

3

lambda è un modo per definire una funzione inline e la parte prima dei due punti : è il parametro della funzione; in questo caso si chiama student. In questo esempio, la funzione restituisce semplicemente la terza parte dell'elenco o la tupla passata ad essa, che è l'età.