【问题标题】:all() returning a generator?all() 返回一个生成器?
【发布时间】:2014-02-14 15:19:39
【问题描述】:

所以我想测试一个列表是否已排序。在阅读了这个page 之后,我这样做了:

ll = [ 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 ]
all(b >= a for a, b in zip(ll, ll[1:]) )

输出

<generator object <genexpr> at 0x10d9ecaa0>

好的,all() 返回一个生成器。但这就是 Python 文档中关于 all() 的内容:

如果迭代的所有元素都为真(或者如果 可迭代为空)

我错过了什么?

【问题讨论】:

  • 不是在 Python 2.7.5 上,我得到了 False...
  • 我在 Python2 和 3 中都得到了False
  • 也无法复制。请给SSCCE
  • 也许你的all 被用户自定义的函数覆盖了。如果你写print all,是不是&lt;built-in function all&gt;
  • .. 这就是为什么没有人应该做from numpy import *,或者使用任何做同样事情的环境。

标签: python iterator generator


【解决方案1】:

这是那些愚蠢的明星进口的问题:

from numpy import *

ll = [ 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 ]
all(b >= a for a, b in zip(ll, ll[1:]) )
#>>> <generator object <genexpr> at 0x7f976073fdc0>

Python 的 all 工作正常。

您可以通过python2中的__builtin__模块和python3中的builtins模块访问它:

import __builtin__
__builtin__.all(b >= a for a, b in zip(ll, ll[1:]))

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2016-07-24
    • 2017-04-29
    • 1970-01-01
    • 2018-12-13
    • 2017-12-16
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多