2012-10-09 11 views
10

Duplicar posibles:
Syntax behind sorted(key=lambda :)Uso ordenados() en Python

yo estaba pasando por la y me encontré con este ejemplo:

> 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)] 

Lo que don' entiendo es qué son lambda y estudiante aquí? ¿Pueden ser reemplazados por otros nombres? ¿Y qué : hacer en student:student[2]? Es un poco ambiguo ya que nunca me he encontrado con esto antes.

Respuesta

27

punto de vista semántico, esto:

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

es lo mismo que esto:

def sort_key(student): 
    return student[2] 

print sorted(student_tuples, key=sort_key) 

lambda simplemente proporciona una sintaxis alternativa para la definición de la función. El resultado es un objeto de función, como el creado por def. Sin embargo, hay ciertas cosas que las funciones lambda no pueden hacer, como definir nuevas variables. Son buenos (dependiendo de a quién le preguntes) para crear pequeñas funciones de un solo uso, como esta.

Una vez que entienda que, entonces todo lo que tiene que saber es que key acepta una función, lo llama en cada valor de la secuencia pasa a sorted, y ordena los valores de acuerdo con el orden en que sus correspondientes key valores tomarían si ellos fueron ordenados ellos mismos.

+1

Muchas gracias. –

3

lambda es una forma de definir una función en línea, y la parte anterior a los dos puntos : es el parámetro de la función; en este caso se llama student. En este ejemplo, la función simplemente devuelve la tercera parte de la lista o tupla que se le pasa, que es la edad.

Cuestiones relacionadas