2015-10-19 1 views
2

Dans une console de python (en utilisant 2,7) si je mets dans le code suivant:tout de Python() ne donne pas le résultat attendu à une liste de petits nombres sont moins une valeur

vals = [1.2e-5, 1.5e-5, 3.2e-5, 4.5e-5] 
for val in vals: print val < 0.001, 

La sortie est True True True True comme prévu.

Mais! Voici mon problème, si j'essaye all(vals) < 0.001 il renvoie faux?

Est-ce la mise en forme du nombre lui donnant des problèmes ou quelque chose d'autre? Si je le fais à nouveau mais remplacez la liste de vals avec vals = [2,2,2,2] et vérifiez < 3 que j'obtiens la sortie désirée des deux manières!

EDIT réponses utiles, il est intéressant de noter que tous les ([0,1, 0,1, 0,1]) est évaluée à vrai, mais 0,1 == Vrai Faux Equivaut à? Qu'est-ce qui se passe avec ça? Est-ce qu'une valeur "non nulle" sera évaluée à Vrai mais n'est pas réellement "Vrai"?

+1

Cochez [Comment fonctionnent toutes les fonctions de Python?] (Http://stackoverflow.com/questions/19389490/how-pythons-any-and-all-functions-work) – sam

+0

@ sam2090 Qu'est-ce que c'est fou? en fait lire ça, et je ne pouvais toujours pas voir ce que je faisais mal !! Je suppose que ça vient de regarder quelque chose pendant trop longtemps. Tous triés maintenant! – rhawker

Répondre

2

Votre utilisation est incorrecte. all(x < 0.001 for x in vals) devrait bien se passer.

all(vals) < 0.001 vérifiera si tous vals est truthy, puis comparer le True ou False vous obtenez le résultat avec 0.001, ce qui est bizarre.

+0

Vous avez raison de l'avoir utilisé de manière incorrecte, mais pouvez-vous ajouter des informations concernant l'édition que j'ai ajoutée à ma question? – rhawker

+1

'int (Vrai) == 1'; 'int (False) == 0'. Par conséquent, 'True == 1' et' False == 0'. Comment cela se rapporte à '<0.001' devrait être évident maintenant :) – Amadan

+0

@Amadan: vous n'avez même pas besoin des appels' int', puisque 'bool' est une sous-classe de' int'. 'True == 1' est' True'. – Blckknght

2

all(vals) vérifie si toutes les valeurs sont booléennes Vrai (c'est-à-dire non nul). C'est vrai. Vrai n'est pas inférieur à 0.001.

Je pense que vous voulez quelque chose comme all(val < 0.001 for val in vals).

+0

Vous avez raison de l'avoir utilisé de manière incorrecte, mais pouvez-vous ajouter des informations concernant l'édition que j'ai ajoutée à ma question? – rhawker