Utilisez la any()
function et une expression du générateur:
any(o is a for o in l)
Le comportement de in
est documentée dans le Common Sequence Operators section:
x in s
True
si un élément de sest égal àx, sinon False
mine accent gras.
Si vous devez utiliser in
, utilisez un objet emballage avec une méthode personnalisée __eq__
qui utilise is
, ou construire votre propre conteneur où une coutume __contains__
method utilise is
pour effectuer le test de chaque élément contenu.
L'enveloppe pourrait ressembler à ceci:
class IdentityWrapper(object):
def __init__(self, ob):
self.ob = ob
def __eq__(self, other):
return other is self.ob
Démo:
>>> IdentityWrapper(a) in l
False
>>> IdentityWrapper(a) in (l + [a])
True
Le conteneur pourrait simplement utiliser la même fonction any()
décrit ci-dessus:
class IdentityList(list):
def __contains__(self, other):
return any(o is other for o in self)
Démo:
>>> il = IdentityList(l)
>>> a in il
False
>>> a in IdentityList(l + [a])
True
liées: http://stackoverflow.com/q/29692140/674039 – wim