Ha habido un cambio en la función sorted() de Python , ahora toma tres valores, a saber, iterable, key y reverse. Estos dos últimos son opcionales, pero este artículo enfatiza la parte clave de la función sorted() . Lo que hace la clave es que ayuda en la comparación de elementos iterables durante la clasificación. Python ya tenía la función cmp() que solía comparar dos valores y devolver 1, -1 o 0. Pero a partir de Python 3.0 y versiones posteriores, esta función quedó obsoleta y se introdujo una nueva función cmp_to_key(). El siguiente artículo trata sobre la aplicación y la explicación de esta función.
Definición
- cmp_to_key() usa una clave para comparar elementos
- Está integrado en el módulo functools, por lo que functools debe importarse primero para poder usar la función
- Se utiliza con herramientas que aceptan funciones clave como min(), max(), sorted(), etc.
- Toma solo un argumento que estrictamente debería ser invocable
- Esta función devuelve una clave especial que se puede usar para comparar elementos
Sintaxis:
functools.cmp_to_key(llamable)
Explicación
- Cada elemento se compara con todos los demás elementos de la lista hasta que se obtiene una lista ordenada
- Cada elemento aparentemente llama a la función mycmp() con el otro elemento de la lista
- La función mycmp() devuelve una clave después de comparar los números
- Esta clave eventualmente ayuda a sorted() a organizar los elementos en orden ascendente
A continuación se muestra la implementación.
Ejemplo 1: programa que ordena una lista usando una clave proporcionada por la función cmp_to_key()
Python3
import functools def mycmp(a, b): print("comparing ", a, " and ", b) if a > b: return 1 elif a < b: return -1 else: return 0 print(sorted([1, 2, 4, 2], key=functools.cmp_to_key(mycmp)))
Producción:
comparing 2 and 1 comparing 4 and 2 comparing 2 and 4 comparing 2 and 2 comparing 2 and 4 [1, 2, 2, 4]
Ejemplo 2: programa que imprime números máximos y mínimos de una lista usando la clave proporcionada por la función cmp_to_key()
Python3
import functools def mycmp(a, b): print("comparing ", a, " and ", b) if a > b: return 1 elif a < b: return -1 else: return 0 print(min([45, 78, 813], key=functools.cmp_to_key(mycmp))) print(max([45, 78, 813], key=functools.cmp_to_key(mycmp)))
Producción:
comparing 78 and 45 comparing 813 and 45 45 comparing 78 and 45 comparing 813 and 78 813
Publicación traducida automáticamente
Artículo escrito por vanshikagoyal43 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA