我为filter()
尝试了许多不同的匿名函数示例,但只要我在字符串上使用它就会得到奇怪的结果。以下是一个例子:
>>>print(filter(lambda x: x.isdigit(), "aas30dsa20"))
<filter object at 0x00000000035DE470>
如果不是字符串,一切正常。例如;
>>> print(list(filter(lambda x: x >= 30 and x <= 70, [x**2 for x in range(1,11)])))
[36, 49, 64]
顺便说一下,如果删除list()
功能部分,会出现与字符串大小写相似的问题:
>>> print(filter(lambda x: x >= 30 and x <= 70, [x**2 for x in range(1,11)]))
<filter object at 0x00000000037BFDD8>
我在Windows 7上使用Python 3.4.1。
答案 0 :(得分:2)
是。一些功能工具(最值得注意的是filter()
和map()
)被更改为返回迭代器而不是3.x的序列。
答案 1 :(得分:1)
在Python 2中,filter()函数返回一个列表,即通过对序列中的每个项返回True或False的函数过滤序列的结果。在Python 3中,filter()函数返回迭代器而不是列表。 资料来源:diveintopython3.net
在某些情况下,2to3 tool会在对filter()的调用周围进行list()调用,以确保结果仍然是列表。如果您需要在没有2to3转换的情况下在Python 2和Python 3中运行的代码,并且您需要将结果作为列表,那么您也可以这样做。