在Python中过滤是如何工作的?

2024-09-28 22:38:56 发布

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

Python有filter方法,该方法根据一些条件过滤所需的输出,如下例所示。在

>>> s = "some\x00string. with\x15 funny characters"
>>> import string
>>> printable = set(string.printable)
>>> filter(lambda x: x in printable, s)
'somestring. with funny characters'

示例取自link。现在,当我尝试在pythonide中执行类似的操作时,它确实返回结果'somestring. with funny characters',实际上它返回这个<filter object at 0x0000020E1792EC50>。在IDE中,我不能只使用简单的Enter,所以我在过滤时用print运行整个代码。我哪里做错了?谢谢。在


Tags: 方法lambdaimportstringwithsomefilter条件
2条回答

在python3中,filter返回一个生成器(参见docs

因此,您通常希望将其转换为一个列表以查看其内容,或者在您的情况下,转换为一个字符串:

>>> s = "some\x00string. with\x15 funny characters"
>>> import string
>>> printable = set(string.printable)
>>> f = filter(lambda x: x in printable, s)
>>> ''.join(f)
'somestring. with funny characters'

filter作为迭代器的好处是它使用更少的内存。它也可以很容易地循环,就像一个列表。在

在python2.x中filter返回一个新列表,但是在python3.x中它返回一个filter对象(generator),如果您想查看结果,只需调用list(yourobject)将其转换为列表。在

您必须知道python3版本(作为生成器)可以工作lazily,或者您可以使用itertools模块来保持python2上的行为类似于python3。在

>>> list(itertools.ifilter(lambda x: x > 5, xrange(20)))
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

相关问题 更多 >