functools.cmp_to_key() în Python

Modulul functools Python 3.2+

Transformă o funcție de comparare veche (care returnează negativ, zero, pozitiv) într-o cheie de sortare.

Sintaxă
sorted(colectie, key=functools.cmp_to_key(comparator))

Ce face functools.cmp_to_key()

În Python 3, sorted() și list.sort() acceptă doar key, nu și o funcție de comparare. Unele reguli de ordonare sunt însă mai ușor de scris ca „compară a cu b”: returnezi un număr negativ dacă a vine înainte, 0 dacă sunt egale, pozitiv dacă vine după. cmp_to_key() face legătura.

Parametri

Parametru Descriere
mycmp Funcția de comparare cu două argumente.

Ce returnează

O clasă-cheie folosită ca key.

Exemple

Exemplul 1: Cel mai mare număr format din cifre

Pentru două numere, verificăm care alăturare dă un număr mai mare: "9" + "34" sau "34" + "9".

from functools import cmp_to_key

def compara(a, b):
    if a + b > b + a:
        return -1
    if a + b < b + a:
        return 1
    return 0

numere = ["3", "30", "34", "5", "9"]
print("".join(sorted(numere, key=cmp_to_key(compara))))

Rezultat

9534330

Greșeli frecvente

  • Funcția de comparare returnează True/False în loc de negativ/zero/pozitiv, iar sortarea iese greșită.

Comenzi înrudite

  • sorted(): Returnează o listă nouă, sortată, cu elementele unei colecții.
  • list.sort(): Sortează o listă pe loc, cu criteriu și ordine opționale.
  • functools.total_ordering: Completează automat toți operatorii de comparare ai unei clase care definește doar egalitatea și unul dintre ei.