Questa è una domanda forse stupida, ma guardando the mapping of operators to functions ho notato che non c'è alcuna funzione per esprimere l'operatore not in
. All'inizio ho pensato che questo fosse probabilmente perché l'interprete semplicemente riordinava questo come not x in y
, ma c'è una funzione per is not
che sembra si dovrebbe comportare esattamente come not in
. Mi manca qualcosa o l'operatore non esiste davvero?operatore python, nessun operatore per "non in"
Ecco un esempio veramente stupido in cui si potrebbe desiderare questo:
def compare_iter(a,b,func):
return [func(aa,bb) for aa,bb in zip(a,b)]
my_compare=compare_iter(xx,yy,lambda x,y:x not in y) #lambda -- yuck
my_compare=map(operator.not_,compare_iter(xx,yy,operator.contains) #extra map? grr...
#it would be nice to do: my_compare=compare_iter(xx,yy,operator.not_contains)
Naturalmente potrei scrivere il mio propria funzione per questo, ma poi si paga un prezzo in termini di efficienza, mentre il modulo operatore potrebbe spingere questo codice fuori di python e quindi eseguire più velocemente.
In effetti, non si può "a non b" essere semplicemente riordinato in "non a è b"? – JAB
Ci sono situazioni in cui un controllo per "non in" potrebbe essere eseguito più velocemente di un controllo per "in"? –
@PaulManta dubbioso, poiché 'not in' è per definizione una ricerca esauriente. –