2017-03-17 71 views
1

当我运行这段代码在Python 3:筛选对象错误3

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

我得到这个错误:

filter object at 0x7fd83ff0 
filter object at 0x7feede10 

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

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

回答

1

这是不是一个错误 - 你印刷型过滤器为filter()对象不返回名单 - 它构建迭代,但只有如果它的请求。

最简单的办法是使用功能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他们返回更多的东西一般较少的内存占用,作为东西方如何获取中的元素感兴趣的案例

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

+0

非常感谢,所以mesage是迭代器的内存地址? –

+0

几乎为真 - **过滤器**对象本身的内存地址(因为*迭代器*对象仅在需要的情况下生成)。如何打印大多数对象是常用的方法。 – MarianD

+0

@JoseMaria - 请考虑接受/投票我的答案,如果它对你有用。 – MarianD