PyQuiz 46 - sorted() con key en Python | Quiz interactivo

PyQuiz 46 – sorted() con key en Python

El reto

palabras = ['gato', 'ave', 'perro']
resultado = sorted(palabras, key=len)
print(resultado)

¿Cuál es el resultado?

  • a) ['ave', 'gato', 'perro']
  • b) ['perro', 'gato', 'ave']
  • c) ['ave', 'gato', 'perro']

Piensa tu respuesta antes de seguir leyendo…


Concepto: sorted() con key

La función sorted(iterable, key=None, reverse=False) devuelve una nueva lista ordenada. El parámetro key acepta una función que se aplica a cada elemento para determinar su valor de comparación. Con key=len, los elementos se ordenan por su longitud.

Python aplica la función key a cada elemento para obtener un valor de comparación, pero los elementos originales son los que aparecen en la lista resultante. Así, sorted(['gato', 'ave', 'perro'], key=len) ordena por longitudes [4, 3, 5] y devuelve los strings originales en ese orden: ['ave', 'gato', 'perro'].

# Ordenar por longitud
palabras = ['banana', 'kiwi', 'pera', 'mango']
print(sorted(palabras, key=len))
# ['kiwi', 'pera', 'mango', 'banana']

# Ordenar por valor absoluto
numeros = [-5, 2, -1, 8, -3]
print(sorted(numeros, key=abs))
# [-1, 2, -3, -5, 8]

Paso a paso

  1. palabras = ['gato', 'ave', 'perro'] — Lista con tres strings. Sus longitudes: 'gato'=4, 'ave'=3, 'perro'=5.
  2. sorted(palabras, key=len) — Python evalúa len para cada elemento: len('gato')=4, len('ave')=3, len('perro')=5.
  3. Se ordenan los elementos por sus valores de clave: 3 < 4 < 5, es decir, 'ave' < 'gato' < 'perro'.
  4. resultado = ['ave', 'gato', 'perro'] — La lista ordenada por longitud ascendente.
  5. print(resultado) — Se imprime ['ave', 'gato', 'perro'].

📥 Llévate el cheatsheet de Python (gratis)

PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.

Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.

Solución

Respuesta correcta: A) ['ave', 'gato', 'perro']

key=len ordena por longitud: 'ave'(3), 'gato'(4), 'perro'(5).

Sabías que...

El parámetro key también acepta lambda, métodos y funciones de operator para ordenaciones más complejas:

from operator import itemgetter

# Ordenar diccionarios por un campo
peliculas = [
    {'titulo': 'Matrix', 'anio': 1999},
    {'titulo': 'Inception', 'anio': 2010},
    {'titulo': 'Interstellar', 'anio': 2014},
]
ordenas_por_anio = sorted(peliculas, key=itemgetter('anio'))

# Ordenar ignorando mayúsculas
nombres = ['ana', 'Bruno', 'carlos', 'Diana']
print(sorted(nombres, key=str.lower))
# ['ana', 'Bruno', 'carlos', 'Diana']

# Orden inverso
print(sorted(palabras, key=len, reverse=True))
# ['perro', 'gato', 'ave']

Prueba tú mismo

¿Cómo ordenarías la lista ['Hola', 'mundo', 'Python', 'es', 'genial'] por longitud de mayor a menor? ¿Qué parámetro adicional necesitas?


Más PyQuizzes en elpythonista.com/pyquizzes

Tutorial relacionado: Funciones en Python

¿Quieres aprender Python en orden, no a saltos?

Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.

Ver el curso completo →

37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía

Compartir