Para los contenedores incorporados en Python (list
, tuple
, etc.) el operador in
es equivalente a any(y == item for item in container)
con la advertencia de que el primer método es más rápido (y más bonita):¿Las listas de Python tienen un equivalente para __contains__ que prueba la identidad?
In [13]: container = range(10000)
In [14]: %timeit (-1 in container)
1000 loops, best of 3: 241 us per loop
In [15]: %timeit any(-1 == item for item in container)
1000 loops, best of 3: 1.2 ms per loop
¿Hay un equivalente a any(y is item for item in container)
? Es decir, una prueba que usa is
en lugar de ==
?
De hecho, siempre me he considerado un defecto de la documentación que los métodos '' list.index' y list.count' etc dicen algo en el sentido " Devuelva el índice en la lista del primer elemento cuyo valor * es * x. Es un error si no existe tal artículo " – mgilson
Pero incluso con conjuntos,' in' verifica el valor hash que no * garantiza * que el los objetos son distintos considere 'a = (1,2,3); c = (1,2,3); c es a; s = set ([a]); c en s'. Aunque, actualmente, no puedo pensar en un momento en el que esto importe. – mgilson
No, solo indica que el operador 'in' en sets y dicts no tiene * do * scan. –