2012-03-24 17 views
5

¿cuál es la mejor manera de convertir una lista en valor bool? Busco algo como:bool valor de una lista en Python

return eval_bool(my_list) 

Tengo un contenedor personalizado en el que pongo en práctica el método __nonzero__ que se supone que funciona de esta manera:

if self.my_list: 
    return True 
return False 

pero ¿es suficiente Pythonic? :) De todos modos, tengo curiosidad de cómo Python interpreta el valor de la lista en la declaración if ya que este código funciona de forma diferente:

return my_list == True 

J.

Respuesta

14

sólo tiene que utilizar:

bool(my_list) 

que evalúa es como "verdad" de Python y devuelve un booleano real.

+0

¡Guau, qué fácil! ¡Gracias! – galapah

+1

Si bien se puede usar 'bool', es más pitónico llamar a' if my_list: 'y dejar que Python determine si' mi_lista' debería evaluar 'True' o' False'. –

+0

@SimeonVisser: ¿Por qué 'if my_list: return True \ nreturn False' más pythonic que' return bool (my_list) '? – WolframH

2

Si len(my_list) == 0 se devuelve como false, de lo contrario es true. Es completamente Pythonic a escribir:

return len(my_list) 

que aunque se devuelve como un entero, se evalúa como true para cero longitudes no, y falso en caso contrario.

+0

Eso devolverá el valor entero, sin embargo, y queremos un valor booleano. –

+0

funciona, pero infringe pep 8: para secuencias, (cadenas, listas, tuplas), utilice el hecho de que las secuencias vacías son falsas. Sí: si no seq: if seq: No: if len (seq) if not len ​​(seq) – luca