Python 2.x和3.x之间的“filter()”是否已更改?

2024-10-02 00:39:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我用匿名函数尝试了许多不同的例子来说明filter(),但是只要我在字符串上使用它,总是会得到奇怪的结果。下面是一个例子:

>>>print(filter(lambda x: x.isdigit(), "aas30dsa20"))
<filter object at 0x00000000035DE470>

如果不是弦,一切都很好。例如

^{pr2}$

顺便说一下,如果我删除list()函数部分,就会出现类似于string case的问题:

>>> print(filter(lambda x: x >= 30 and x <= 70, [x**2 for x in range(1,11)]))
<filter object at 0x00000000037BFDD8>

我在Windows7上使用Python3.4.1。在


Tags: andlambda函数字符串stringobjectfilterat
2条回答

在Python2中,filter()函数返回一个列表,这是通过函数过滤序列的结果,该函数为序列中的每个项返回True或False。在Python3中,filter()函数返回迭代器,而不是列表。 来源:diveintopython3.net

在某些情况下,2to3 tool将在对filter()的调用周围放置一个list()调用,以确保结果仍然是一个列表。如果您需要在python2和python3中同时运行而不需要2to3转换的代码,并且需要结果是一个列表,那么您也可以这样做。在

是的。几个函数工具(最显著的是filter()map())被更改为返回迭代器,而不是3.x的序列

相关问题 更多 >

    热门问题