Comment tester efficacement l'appartenance à plusieurs valeurs dans une liste Python : itération, ensembles ou all() ?

Linda Hamilton
Libérer: 2024-10-30 11:45:05
original
295 Les gens l'ont consulté

How to Efficiently Test Membership of Multiple Values in a Python List: Iterating, Sets, or all()?

Test de l'appartenance à plusieurs valeurs dans une liste par itération

Le comportement de Python lors du test de l'appartenance de plusieurs valeurs à une liste peut prêter à confusion. L'utilisation de 'a', 'b' dans ['b', 'a', 'foo', 'bar'] renvoie ('a', True), indiquant que le résultat est un tuple où le premier élément est la première valeur. coché et le deuxième élément est l’appartenance à cette valeur. Pour tester l'appartenance de plusieurs valeurs dans une liste, l'approche suivante est recommandée :

all(x in ['b', 'a', 'foo', 'bar'] for x in ['a', 'b'])
Copier après la connexion

Cette instruction utilise une expression génératrice dans la fonction all() pour tester l'appartenance de chaque valeur de la deuxième liste à la première.

Approches alternatives

Bien que la méthode basée sur les itérations soit généralement fiable, des approches alternatives existent. L'utilisation d'ensembles fournit une option de test de sous-ensemble :

set(['a', 'b']).issubset(set(['a', 'b', 'foo', 'bar']))
Copier après la connexion

Cependant, les ensembles ne peuvent contenir que des éléments hachables, ce qui limite leur application.

Considérations relatives à la vitesse

Le test de sous-ensemble est généralement plus rapide, mais la différence n'est significative que lorsque le conteneur et les éléments sont petits. Dans la plupart des cas, l'utilisation de la fonction all() est toujours efficace.

Si les éléments sont déjà dans une liste, les convertir en un ensemble avant d'utiliser le test de sous-ensemble peut accélérer légèrement. La conversion d'un conteneur qui n'est pas un ensemble en un ensemble n'est pas recommandée, car l'accélération est minime et la surcharge de stockage supplémentaire peut être problématique.

Cas exceptionnels

Quand En testant l'appartenance à un grand nombre de valeurs, surtout si certaines ne sont pas dans le conteneur, all() peut offrir un avantage de vitesse significatif par rapport au test de sous-ensemble. Cela est dû à son comportement de court-circuit, qui lui permet de contourner les éléments de test qui ne sont pas présents dans le conteneur.

Résumé

Pour un usage général, la conversion du conteneur dans un ensemble est recommandé si ses éléments sont hachables. Le test de sous-ensemble n'est avantageux que si les éléments de test sont déjà stockés dans un ensemble. Dans certaines situations, comme tester l'appartenance à un grand nombre de valeurs, all() offre des performances supérieures.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!