过滤如何在Python中运行?

时间:2016-07-27 09:19:18

标签: python python-3.x

Python有一个过滤方法,可以在某些条件上过滤所需的输出,如下例所示。

>>> 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。现在,当我尝试在Python IDE中执行类似的操作时,它会返回结果'somestring. with funny characters',因为它会返回此<filter object at 0x0000020E1792EC50>。在IDE中,我不能只使用简单的Enter,所以我在过滤时使用打印运行整个代码。我做错了什么?感谢。

2 个答案:

答案 0 :(得分:2)

在python 2.x过滤器中返回一个新列表但是在python 3.x上它返回一个过滤器对象(生成器),如果你想看到结果只是调用list(yourobject)来将它转换成一个列表。

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

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

答案 1 :(得分:2)

在python3过滤器中返回一个生成器(参见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作为迭代器的好处是它使用的内存要少得多。它也可以很容易地循环,就像列表一样。