Python: 使用生成器表达式时 any() 返回错误答案
我想知道列表中的某个元素是否符合特定条件。为此,我想在 any() 函数里面使用生成器表达式,但输出的结果似乎不太对劲:
>>> x
[0, 0, 0]
>>> gen = (z==1 for z in x)
>>> any(gen)
True
如果我改用列表,我就能得到正确的答案:
>>> x
[0, 0, 0]
>>> com = [z==1 for z in x]
>>> any(com)
False
我在两台不同的 Windows 7 电脑上试过,一台是 python 2.7.2,另一台是 2.7.3。两者都返回了错误的答案。我让别人用他们的机器试了一下,他们的 python 版本是 2.7.5,结果得到了正确的答案。有人知道这是怎么回事吗?
2 个回答
-2
你第一个例子的结果在Python 3.4中是“False”。所以看起来是正常的,没问题,应该就是这样。
这看起来像是旧版Python中的一个错误,或者可能在旧的Python 2时代就是这样设计的。
0
上面的说法在我这台机器上,Python 3.x 和 2.x 都能返回正确的结果,所以造成上面问题的原因可能是一些目前还不知道的其他因素。上面的评论试图从这个谜团中找出一些线索。比较有效的做法是检查一下你的 Python 是否运行正常,没有任何第三方的包。如果没有问题的话,可以尝试简化一下你的代码,然后逐步添加回去,直到找到出问题的那个包。