Per i contenitori built-in Python (list
, tuple
, ecc) l'operatore in
equivale a any(y == item for item in container)
con l'avvertenza che il primo metodo è più veloce (e più bella):Gli elenchi Python hanno un equivalente per __contains__ che verifica l'identità?
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
c'è un equivalente per any(y is item for item in container)
? Cioè, un test che usa is
invece di ==
?
In realtà, ho sempre considerato un difetto di documentazione che i metodi '' list.index' e list.count' ecc dicono qualcosa per l'effetto " Restituisce l'indice nell'elenco del primo elemento il cui valore * è * x È un errore se non esiste tale elemento " – mgilson
Ma anche con i set,' in' controlla il valore hash che non * garantisce * che il gli oggetti sono distinti. considera 'a = (1,2,3); c = (1,2,3); c è un; s = set ([a]); c in s'. Anche se, al momento, non riesco a pensare a un momento in cui ciò sarebbe importante. – mgilson
No, sottolineando che l'operatore 'in' su set e dict non ha * do * una scansione. –