2017-01-15 1 views
3

Ma compréhension de l'opérateur all() est qu'il retourne vrai si tous les éléments d'un itératif retournent une valeur de vrai. Soit je suis tout malentendu, il est tout à fait fonction, ou quelque chose n'est pas tout à fait raison dans ce qui suit:Python all ([6,7,8,9]) = True. Mais 6 = Faux

>>> all([0, 7, 8, 9]) 
False 
>>> all([6, 7, 8, 9]) 
True 
>>> any([0, 7, 8, 9]) 
True 
>>> 0 == True 
False 
>>> 1 == True 
True 
>>> 6 == True 
False 
>>> 7 == True 
False 

Quoi de neuf avec cela?

Modifier Bon, je reçois beaucoup de réponses expliquant que 0 est faux. Je comprends ça. 0 = Faux et 1 = Vrai. Mon problème est que 6 est retourné comme faux, mais lorsqu'il est testé dans le cadre d'une liste, il renvoie vrai?

>>> all([6, 7, 8, 9]) 
True 
>>> 6 == True 
False 

Ceci est le bit que je n'obtiens pas?

+2

voir 'bool (6)'. –

+0

True et False ont une valeur ordinale de 0 et 1 IIRC. D'où ce comportement. Si vous voulez interpréter comme bool, utilisez, par exemple, 'bool (6)' –

+0

On dirait que ça a été fermé trop vite. Vérifiez-moi: ce que vous demandez vraiment, c'est que '6' et' 7' semblent être 'Faux', alors pourquoi est-ce que la deuxième expression 'True'. Si c'est le cas, la réponse est que les entiers non-zéros s'évaluent à "True" dans un contexte booléen; mais quand vous testez '6 == True', l'entier n'est pas forcé dans un type booléen, donc vous testez' 6 == 1', ce qui est 'False'. –

Répondre

2

Vérifiez moi: ce que vous demandez est vraiment, 6 et 7 semblent être False, alors pourquoi est la deuxième expression True. Si oui, la réponse est que les entiers non-zéros évaluent à True dans un contexte booléen; mais lorsque vous testez 6 == True, l'entier n'est pas converti en un type booléen, donc vous testez 6 == 1, qui est False.

Edit: La bonne manière de vérifier si quelque chose est True dans un contexte booléen est, par exemple:

bool(6)