Pourquoi la liste b peut-elle être trouvée dans some_list alors qu'elle n'est pas dans some_list?
>>> a = []
>>> b = []
>>> a is b
False
>>> some_list = [0, 1, 2, 3, a]
>>> some_list.index(b)
4
4 réponses
list.index
de Python recherche les tests d'égalité, pas d'identité. a
et b
ne sont pas identiques, mais égaux:
>>> a = []
>>> b = []
>>> a == b
True
Définissez __eq__
sur vos objets a, b si vous le souhaitez une définition différente de l'égalité, par exemple:
def __eq__(self, other):
return self is other
def __hash__(self):
return 0 # Insert a more sensible, object-specific hash function here
.index
renvoie la 4ème position car il compare a et b, deux listes vides. Ils sont égaux. Si vous faites a is b
, il compare les adresses mémoire des objets, et elles sont différentes, c'est pourquoi cette expression est évaluée à False.
In [1]: a = []
In [2]: b = []
In [3]: a == b
Out[3]: True
Essayez d'exécuter le a == b
. L'opérateur '==' vérifie si les valeurs des variables sont les mêmes, tout comme la fonction d'index. La fonction is
comapres les variables id ().
Cela pourrait être utile:
>>> a = []
>>> b = []
>>> id(a)
4299650400
>>> id(b)
4299730096
>>> a == b
True
>>> a is b
False
Notez également celui-ci:
>>> some_list = [0, 1, 2, 3, a]
>>> some_list.index(b)
4
>>> some_list[4] == b
True
>>> some_list[4] is b
False
Ils sont différents:
a is b
N'est vrai que s'ils sont tous deux liés au même objet. Cependant, l'index vérifie uniquement si les valeurs sont égales.
Pour mettre un exemple C, 3 == 3
mais
int a = 3;
int b = 3;
&a == &b // this is false
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.