2011-01-26 22 views
23

Mam listę jak tenPython - Znalezienie MAX wartość w drugiej kolumnie zagnieżdżonej listy

alkaline_earth_values = [['beryllium', 4], ['magnesium', 12],['calcium', 20], ['strontium', 38], ['barium', 56], ['radium', 88]] 

Gdybym po prostu użyć metody max(list), zwróci stront odpowiedzi, która byłaby poprawna, jeśli próbował znaleźć max nazwę, jednak próbuję zwrócić element, którego liczba całkowita jest najwyższa.

+3

Odpowiedzi są tutaj bardzo dobre, ale warto też sprawdzić [podobne pytanie] (http://stackoverflow.com/questions/14884220/search-the-biggest-number-of-one-column- in-a-list-of-list-python # 14884336), który został zamknięty jako duplikat tego, ale mimo to ma kilka przydatnych odpowiedzi, które nie są takie same. –

Odpowiedz

46
max(alkaline_earth_values, key=lambda x: x[1]) 

Powodem działa to dlatego, że klucz argument max funkcji określa funkcję, która jest wywoływana, gdy max chce poznać wartość, o którą maksymalna elementem będą wyszukiwane . max wywoła tę funkcję dla każdego elementu w sekwencji. Natomiast "lambda x: x [1]" tworzy małą funkcję, która przyjmuje listę i zwraca pierwszy element (liczenie rozpoczyna się od zera). Więc

k = lambda x: x[1] 

jest taka sama jak mówią

def k(l): 
    return l[1] 

ale krótsze i przyjemne w użyciu w takich sytuacjach.

+0

Dziękuję bardzo, pracowałem jak mistrz. – davelupt

+0

Czy mógłbyś wyjaśnić słowom laików, co to robi. Myślę, że rozumiem, że x: x [1] definiuje pozycję, ponieważ jeśli podstawię w 0 dla 1, zwraca poprawną maksymalną wartość ciągu. Ale jednak nie rozumiem w pełni znaczenia klucza i lambda, mimo że patrzę na bibliotekę Pythona. Klucz – davelupt

+1

jest argumentem kluczowym wbudowanej funkcji max(). Kluczowym argumentem powinna być możliwość wywołania (funkcja, lambda itp.), Która w przypadku elementu iteracji zwraca wartość do użycia w porównaniu. "Lambda x: x [1]" tworzy anonimową funkcję (lambda), która zwraca drugi element czegoś, co obsługuje notację plasterka Pythona. –

5

Użyj argumentu key.

max(alk..., key=operator.itemgetter(1)) 
Powiązane problemy