¿Cómo funciona la función functools cmp_to_key en Python?

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *