Maison > développement back-end > Tutoriel Python > Comment comparer efficacement des listes non ordonnées d'objets non hachables ?

Comment comparer efficacement des listes non ordonnées d'objets non hachables ?

Mary-Kate Olsen
Libérer: 2024-11-15 02:38:02
original
1029 Les gens l'ont consulté

How to Efficiently Compare Unordered Lists of Non-Hashable Objects?

Comparer efficacement des listes non ordonnées d'objets non hachables

Les listes non ordonnées (et non les ensembles) posent un défi lorsqu'on les compare pour l'égalité, car leur les éléments peuvent être dans n’importe quel ordre. Cette difficulté devient plus prononcée lorsqu'il s'agit d'objets non hachables, tels que des instances de classes définies par l'utilisateur.

Pour faciliter de telles comparaisons, diverses approches existent avec des complexités temporelles variables :

O(n)

Pour les objets hachables, Counter fournit un solution :

def compare(s, t):
    return Counter(s) == Counter(t)
Copier après la connexion

O(n log n)

Si les objets sont commandables, triés propose une alternative adaptée :

def compare(s, t):
    return sorted(s) == sorted(t)
Copier après la connexion

O(n*n)

Quand ni l'un ni l'autre la hachage ni la possibilité de commander ne sont disponibles, une approche simple utilisant l'égalité peut être utilisée :

def compare(s, t):
    t = list(t)   # make a mutable copy
    try:
        for elem in s:
            t.remove(elem)
    except ValueError:
        return False
    return not t
Copier après la connexion

En choisissant la solution appropriée en fonction de la nature de vos objets, vous pouvez comparer efficacement des listes non ordonnées, même lorsque les éléments ne sont pas hachable ou commandable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal