2017-03-17 66 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