Python tiene dos tipos de clasificaciones: un método de clasificación (o "función miembro") y una función de clasificación . El método de clasificación opera en el contenido del objeto nombrado; piense en él como una acción que el objeto está tomando para reordenarse a sí mismo . La función de clasificación es una operación sobre los datos representados por un objeto y devuelve un nuevo objeto con el mismo contenido en un orden ordenado.
Dada una lista de enteros llamada l
la lista misma se reordenará si llamamos a l.sort()
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
Este método no tiene valor de retorno. Pero, ¿y si tratamos de asignar el resultado de l.sort()
?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
r
ahora es igual a nada en realidad. Este es uno de esos extraños detalles, algo molesto que un programador es probable que se olvide de después de un período de ausencia del Python (que es por eso que estoy escribiendo esto, así que no me olvido otra vez).
La función sorted()
, por otro lado, no hará nada al contenido de l
, pero devolverá una nueva lista ordenada con el mismo contenido que l
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
Tenga en cuenta que el valor devuelto no es una copia profunda , así que tenga cuidado con las operaciones de efectos secundarios sobre los elementos contenidos en la lista como de costumbre:
>>> spam = [8, 2, 4, 7]
>>> eggs = [3, 1, 4, 5]
>>> l = [spam, eggs]
>>> r = sorted(l)
>>> l
[[8, 2, 4, 7], [3, 1, 4, 5]]
>>> r
[[3, 1, 4, 5], [8, 2, 4, 7]]
>>> spam.sort()
>>> eggs.sort()
>>> l
[[2, 4, 7, 8], [1, 3, 4, 5]]
>>> r
[[1, 3, 4, 5], [2, 4, 7, 8]]