web-dev-qa-db-fra.com

Dans quelle mesure Python est-il efficace / rapide? (En termes de complexité temporelle)

En Python, quelle est l'efficacité du mot clé in, comme dans:

a = [1, 2, 3]
if 4 in a:
  ...
38
John

Cela dépend de la main droite opérande :

Les opérateurs in et not in Testent l'appartenance à la collection. [...] Le test d'appartenance à une collection est traditionnellement lié à des séquences; un objet est membre d'une collection si la collection est une séquence et contient un élément égal à cet objet. Cependant, il est logique que de nombreux autres types d'objets prennent en charge les tests d'appartenance sans être une séquence. En particulier, les dictionnaires (pour les clés) et les ensembles prennent en charge les tests d'appartenance.

Les classes peuvent implémenter méthode spéciale __contains__ pour remplacer le comportement par défaut (itérer sur la séquence) et peuvent ainsi fournir un moyen plus (ou moins) efficace de tester l'appartenance que de comparer chaque élément de le conteneur.

Les opérateurs de test d'appartenance (in et not in) Sont normalement implémentés comme une itération à travers une séquence. Cependant, les objets conteneurs peuvent fournir la méthode spéciale suivante avec une implémentation plus efficace, qui ne nécessite pas non plus que l'objet soit une séquence.


Puisque vous avez une liste dans votre exemple, elle est itérée et chaque élément est comparé jusqu'à ce qu'une correspondance soit trouvée ou que la liste soit épuisée. La complexité temporelle est généralement O(n).

40
Felix Kling

La complexité des listes est:

O(n)

Pour les sets c'est:

O(1)

http://wiki.python.org/moin/TimeComplexity

53
Eduardo