2015-10-19 37 views
2

在Python控制台(使用2.7),如果我把下面的代码:Python的所有()未给出预期结果检查小号码列表小于某一值

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

输出为True True True True如预期。

但是!这是我的问题,如果我尝试all(vals) < 0.001它返回false?

这是数字格式给它的问题还是别的什么?如果我再次这样做,但用vals = [2,2,2,2]替换vals列表并检查< 3两种方式都可以得到所需的输出!

编辑 有用的答案,这是有趣的是,所有的([0.1,0.1,0.1])的计算结果为真,但0.1 ==真计算结果为假?这是怎么回事?是否“非零”值将评估为True,但实际上不是“True”?

+1

检查[如何Python的任何和所有功能的工作?](http://stackoverflow.com/questions/19389490/how-pythons-any-and-all-functions-work) – sam

+0

@ sam2090什么是疯狂的是我有实际上阅读,我仍然无法看到我做错了什么!猜猜它来自盯着某事太久。现在全部排序! – rhawker

回答

2

您的用法错误。 all(x < 0.001 for x in vals)应该没问题。

all(vals) < 0.001将检查所有vals是否truthy,然后比较TrueFalse你与0.001的结果,这是奇怪的。

+0

你是对的,我错误地使用了它,但是你能添加关于我添加到我的问题中的编辑的任何信息吗? – rhawker

+1

'int(True)== 1'; 'int(False)== 0'。因此,“True == 1”和“False == 0”。这与'<0.001'有什么关系现在应该很明显:) – Amadan

+0

@Amadan:你甚至不需要int调用,因为'bool'是'int'的子类。 'True == 1'是'True'。 – Blckknght

2

all(vals)检查所有值是否为布尔值真(即非零)。那是真实的。真不小于0.001

我想你想要的东西像all(val < 0.001 for val in vals)

+0

你是对的,我错误地使用了它,但是你能添加关于我添加到我的问题中的编辑的任何信息吗? – rhawker