2013-04-30 9 views
9

Widzę, że służy do sortowania, ale co właściwie oznaczają poszczególne składniki tej linii kodu?Co to oznacza: key = lambda x: x [1]?

key=lambda x: x[1] 

Co lambda, co jest x:, dlaczego [1] w x[1] etc ...

Przykłady

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

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

Ehi! To jest moja odpowiedź na inne pytanie zadane około 1 godziny temu! :RE – fog

Odpowiedz

13

lambda skutecznie tworzy funkcję inline. Na przykład, można przepisać ten przykład:

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

Korzystanie nazwie funkcji:

def element_1(x): 
    return x[1] 

max(gs_clf.grid_scores_, key=element_1) 

w tym przypadku max() powróci element w tej tablicy, której drugi element (x[1]) jest większa niż wszystko pozostałych elementów drugiego elementu. Innym sposobem frazowania jest wywołanie funkcji: return max element, używając x[1] jako klucz .

10

lambda oznacza anonymous function. W takim przypadku ta funkcja przyjmuje pojedynczy argument x i zwraca x[1] (tj. Element o indeksie 1 w x).

Teraz sort(mylist, key=lambda x: x[1]) sortuje mylist na podstawie wartości key, jak stosowane do każdego elementu na liście. Podobnie, max(gs_clf.grid_scores_, key=lambda x: x[1]) zwraca maksymalną wartość gs_clf.grid_scores_ w odniesieniu do wartości zwracanej przez key dla każdego elementu.

Chciałbym również zwrócić uwagę, że ta konkretna funkcja jest już zawarta w jednej z bibliotek: operator. W szczególności, operator.itemgetter(1) jest odpowiednikiem Twojego key.

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

To jest funkcja. I tutaj x jest listą, w której dodajemy x[1], czyli drugi element listy do funkcji sortowania. Zasadniczo dodajemy drugi element każdej listy (tj. X [1]) do funkcji sortowania. Mam nadzieję, że to rozumiesz.