Bonjour,
J'ai une petite question très basique.
Lorsqu'on fait en python:
ouCode:
1
2 if item in dic.keys():
est-ce qu'ici en arrière plan il y a une boucle qui cherche si la valeur existe ou pas?Code:if item not in dic.keys()
Merci
Version imprimable
Bonjour,
J'ai une petite question très basique.
Lorsqu'on fait en python:
ouCode:
1
2 if item in dic.keys():
est-ce qu'ici en arrière plan il y a une boucle qui cherche si la valeur existe ou pas?Code:if item not in dic.keys()
Merci
Salut,
"dict.keys()" est un itérable (comme une liste), "x in dict.keys()" va comparer les valeurs au fur et à mesure contrairement à "x in dict".
- W
merci beaucoup pour votre aide.
et si je fais "for x in dict" est-ce que c'est la meme chose que "for x in dict.keys()".
c'est la meme compléxité?
Merci
Bonjour,
On utilise plutôt for x in dict et c'est meilleur! La pep 234 le dit bien (https://www.python.org/dev/peps/pep-0234/). A ma connaissance, c'est dû au fait que les clés sont "hashées".
Concernant la complexité, wiztricks a déjà répondu.
Salut,
Avec la boucle "for", on est bien obligé d’itérer sur l'ensemble des clefs.... Et dans ce cas (pour Python3), for x in dict est une forme abrégée de for x in dict.keys(), sauf... si on ajoute/supprime des clés (mais Python ne vous laissera pas le choix).
- notes -
Avec Python2, nous avions le choix entre dict.keys() et dict.iterkeys(). Le premier fabriquant une liste, le second un générateur, côté performance, for x in dict était préférable à for x in dict.keys() (pas de fabrication de la liste intermédiaire) mais restait la forme abrégée de for x in dict.iterkeys().
Python3 a remplacé dict.keys() par dict.iterkeys() (qui n'existe plus). Si on veut récupérer la liste des clés, il faut le faire explicitement via list (dict.keys()).
- W
et pour le cas des listes?
si je fais "if x in L"!! la compléxité est O(1).
c'est exacte?
Merci
Bonjour,
tout est dans la doc (c'est bien sûr dépendant de l'implémentation de python que tu utilises). Jette un œil sur Time Complexity.