Esta es una pregunta posiblemente tonta, pero al mirar the mapping of operators to functions noté que no hay una función para expresar el operador not in
. Al principio pensé que esto era probablemente porque el intérprete simplemente reordena esto para que sea not x in y
, pero hay una función para is not
que parece que debería comportarse exactamente igual que not in
. ¿Me estoy perdiendo algo, o ese operador realmente no existe?operador de python, no hay operador para "no entrar"
Aquí hay un ejemplo muy estúpida en la que podría querer esto:
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)
Por supuesto que podría escribir mi propia función para esto, pero entonces pagar un precio en la eficiencia mientras que el módulo operador podría empujar este código a cabo de python y, por lo tanto, ejecutar más rápido.
De hecho, ¿no se pudo reordenar 'a a b' simplemente' not a is b'? – JAB
¿Hay alguna situación en la que un control de 'no en 'podría realizarse más rápido que un cheque para' in'? –
@PaulManta dudoso, ya que 'no en 'es, por definición, una búsqueda exhaustiva. –