【问题标题】:Filter object error in Python 3Python 3 中的过滤对象错误
【发布时间】:2017-08-09 13:41:58
【问题描述】:

当我在 Python 3 中运行这段代码时:

languages = ["HTML", "JavaScript", "Python", "Ruby"]
print( filter(lambda x: x == "Python",languages))

我收到此错误:

filter object at 0x7fd83ff0
filter object at 0x7feede10

我不知道错误是什么意思 - 它在 Python 2.7 中运行正常。

任何人都可以提出解决方案吗?

【问题讨论】:

    标签: python python-2.7 python-3.x lambda filter


    【解决方案1】:

    这不是错误 - 您打印了一个 过滤器类型的对象,因为 filter() 不返回 list - 它是 constructs一个迭代器,但只有有请求时

    最简单的解决方案是使用函数list() - 它请求一个迭代器并返回列表

    print( list(filter(lambda x: x == "Python", languages)))
    

    代替你的命令

    print( filter(lambda x: x == "Python",languages))
    

    注意:类似于打印range(10)(对象)和打印list(range(10))(列表)。

    在 Python 2.x 中返回 list 的几乎所有函数中 Python 2.xPython 3.x 之间都有变化 - 在 Python 3.x 中它们返回的内容更通用且内存消耗更少,例如 recipe 如何在感兴趣的情况下获取元素

    比较:1, 2, 3, 4, 5, 6, 7, 8, 9integers from 1 to 9(或 1, 2, ..., 9)。
    没有区别吗?试着写下all integers from 1 to 999999

    【讨论】:

    • 非常感谢很清楚¿所以消息是迭代器的内存地址?
    • 几乎是真的 - filter 对象本身的内存地址(因为 iterator 对象仅在需要的情况下生成)。大多数对象的打印方式很常见。
    • 我已经这样做了,但我的排名只有 5 分,所以该网站不考虑我的投票,但我非常感谢您的出色回答并感到高兴,只要我获得更多积分(至少 15) 我会再次投票给你..
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多