【问题标题】:Strange behaviour of enumerate in IPythonIPython中枚举的奇怪行为
【发布时间】:2014-05-06 01:11:36
【问题描述】:

我似乎在 IPython shell 和 Notebook 中遇到了一些关于枚举对象的奇怪行为,或者我不理解某些东西。特别是当我在操作中调用 enumerate 函数时,我只能获得以下输出。我不能创建一个枚举对象然后根据它获取输出,这正常吗?

设置:

In [1]: ee_cummings = ['sun', 'moon', 'stars', 'rain']
In [2]: enumerate_object = enumerate(ee_cummings)
In [3]: list(enumerate_object)
Out[3]: [(0, 'sun'), (1, 'moon'), (2, 'stars'), (3, 'rain')]

现在以下内容没有给我任何输出:

In [4]: for tup in enumerate_object:
            print tup
In [5]: [index for index, element in enumerate_object]

但以下确实给出了预期的输出:

In [6]: for tup in enumerate(ee_cummings):
             print tup
        (0, 'sun')
        (1, 'moon')
        (2, 'stars')
        (3, 'rain')
In [7]: [index for index, element in enumerate(ee_cummings)]
Out[7]: [0, 1, 2, 3]

我缺少的枚举对象是否存在不允许以这种方式分配的内容?

【问题讨论】:

    标签: python-2.7 ipython enumerate


    【解决方案1】:

    这不是 ipython,这是 python。 enumerate 返回一个生成器,你只能迭代一次!与其尝试重用它,不如每次都写enumerate(ee_cummings)

    【讨论】:

    • 成为这样一个短暂的对象是多么可怕!保留对象的名称空间似乎很奇怪。如果有原因吗?谢谢
    • 生成器在实践中实际上非常好,例如我可以写for i, p in enumerate(it.permutations(range(20)))而不用担心会破坏我的记忆。持久生成器仅对小列表真正有用。这是一个开始的问题,我同意,但我相信你会被征服:)
    猜你喜欢
    • 2012-11-15
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多