Cuando se comprueba si un elemento no existe en una lista, ¿por qué no funciona este código? – si el elemento en la lista == Falso:

Considera esta lista:

list = [1,2,3,4,5] 

Quiero verificar si el número 9 no está presente en esta lista. Hay 2 formas de hacer esto.

Método 1: ¡Este método funciona!

 if not 9 in list: print "9 is not present in list" 

Método 2: Este método no funciona.

 if 9 in list == False: print "9 is not present in list" 

¿Puede alguien explicar por qué el método 2 no funciona?

Esto se debe al encadenamiento del operador de comparación . De la documentación:

Las comparaciones se pueden encadenar arbitrariamente, por ejemplo, x < y <= z es equivalente a x < y and y <= z , excepto que y se evalúa solo una vez (pero en ambos casos z no se evalúa en absoluto cuando se encuentra x < y ser falso).

Está asumiendo que el 9 in list == False expresión 9 in list == False se ejecuta como (9 in list) == False pero ese no es el caso.

En su lugar, Python evalúa eso como (9 in list) and (list == False) lugar, y la última parte nunca es Verdadera.

Realmente desea utilizar el operador not in , y evitar nombrar su list variables:

 if 9 not in lst: 

Debería ser:

if (9 in list) == False: print "9 is not present in list"