¿Cuál es la mejor manera de verificar si una tupla tiene algún valor vacío / Ninguno en Python?

¿Cuál es la manera mejor / más eficiente de verificar si todos los valores de la tupla? ¿Debo recorrer todos los elementos de la tupla y verificarlos o hay alguna manera mejor?

Por ejemplo:

t1 = (1, 2, 'abc') t2 = ('', 2, 3) t3 = (0.0, 3, 5) t4 = (4, 3, None) 

Al verificar estas tuplas, todas las tuplas, excepto t1 , deben devolver True, lo que significa que se denomina valor vacío.

PD: hay una pregunta: pruebe si la tupla solo contiene valores de Ninguno con Python , pero es solo sobre los valores de Ninguno

Es muy fácil:

 not all(t1) 

devuelve False solo si todos los valores en t1 son no vacíos / no cero y no None . all los cortocircuitos, por lo que solo tiene que revisar los elementos hasta el primer vacío, lo que lo hace muy rápido.

Se ha proporcionado una respuesta utilizando todo:

 not all(t1) 

Sin embargo, en un caso como t3, esto devolverá True, porque uno de los valores es 0:

 t3 = (0.0, 3, 5) 

La palabra clave incorporada ‘todos’ comprueba si todos los valores de un iterable determinado son valores que se evalúan como booleanos negativos (Falso). 0, 0.0, ” y Ninguno se evalúan como Falso.

Si solo quiere probar Ninguno (como sugiere el título de la pregunta), esto funciona:

 any(map(lambda x: x is None, t3)) 

Esto devuelve True si alguno de los elementos de t3 es Ninguno, o False si ninguno de ellos lo es.

Para su caso específico, puede usar la función all() , verifica que todos los valores de una lista sean verdaderos o falsos, tenga en cuenta que en Python None , la cadena vacía y 0 se consideran falsos.

Asi que –

 >>> t1 = (1, 2, 'abc') >>> t2 = ('', 2, 3) >>> t3 = (0.0, 3, 5) >>> t4 = (4, 3, None) >>> all(t1) True >>> all(t2) False >>> all(t3) False >>> all(t4) False >>> if '': ... print("Hello") ... >>> if 0: ... print("Hello") 

Si por casualidad quiere comprobar si hay un valor vacío en una tupla que contiene tuplas como estas:

 t1 = (('', ''), ('', '')) t2 = ((0.0, 0.0), (0.0, 0.0)) t3 = ((None, None), (None, None)) 

puedes usar esto:

 not all(map(lambda x: all(x), t1)) 

De lo contrario, si desea saber si hay al menos un valor positivo, use esto:

 any(map(lambda x: any(x), t1))