2013-04-30 20 views
9

Lo vedo usato nell'ordinamento, ma cosa significano realmente i singoli componenti di questa riga di codice?Cosa significa: chiave = lambda x: x [1]?

key=lambda x: x[1] 

Cosa c'è lambda, ciò che è x:, perché [1] in x[1] ecc ...

Esempi

max(gs_clf.grid_scores_, key=lambda x: x[1]) 

sort(mylist, key=lambda x: x[1]) 
+0

Ehi! Questa è la mia risposta a un'altra domanda posta circa 1 ora fa! : D – fog

risposta

13

lambda crea effettivamente una funzione inline. Ad esempio, è possibile riscrivere questo esempio:

max(gs_clf.grid_scores_, key=lambda x: x[1]) 

Utilizzando una funzione denominata:

def element_1(x): 
    return x[1] 

max(gs_clf.grid_scores_, key=element_1) 

In questo caso, max() restituirà i elemento di tale array il cui secondo elemento (x[1]) è maggiore di tutti dei secondi elementi degli altri elementi. Un altro modo di esprimerlo è come implica la chiamata di funzione: restituire l'elemento massimo, utilizzando x[1] come chiave .

10

lambda significa anonymous function. In questo caso, questa funzione prende il singolo argomento x e restituisce x[1] (vale a dire la voce all'indice 1 in x).

Ora, sort(mylist, key=lambda x: x[1]) ordina mylist in base al valore di key applicato a ciascun elemento dell'elenco. Allo stesso modo, max(gs_clf.grid_scores_, key=lambda x: x[1]) restituisce il valore massimo di gs_clf.grid_scores_ rispetto a quello restituito da key per ciascun elemento.

Vorrei anche sottolineare che questa particolare funzione è già inclusa in una delle librerie: operator. Nello specifico, operator.itemgetter(1) equivale al tuo key.

0
distances.sort(key=lambda x: x[1]) 

Questa è la funzione. E qui x è la lista, in cui stiamo aggiungendo x[1] il secondo elemento dell'elenco alla funzione di ordinamento. Quindi, in pratica stiamo aggiungendo il secondo elemento di ogni lista (cioè x [1]) alla funzione di ordinamento. Spero che tu capisca questo.