过滤如何在Python中工作?
问题描述:
Python有一些筛选方法,它按照某些标准筛选所需的输出,如下例所示。过滤如何在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中,我不能使用简单的输入,因此我在过滤时使用打印来运行整个代码。我在哪里做错了?谢谢。
答
行为在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
的好处是它使用的内存少得多。它也可以很容易地循环,就像列表一样。
其实在python2'过滤器'特殊情况下的字符串!否则'filter(lambda x:True,“abc”)'的结果是'['a','b','c']'但实际上是'abc'。 – Bakuriu
要正确,Python 2中的过滤器返回可以返回列表,元组或字符串。 –
@BurhanKhalid这不是事实。特殊情况下'tuple'和'str'。但例如'filter(lambda x:True,{1,2,3})== [1,2,3]'所以'set's被转换为'list's。另外如果你有一个'namedtuple',它将被转换成一个普通的'tuple'等。 – Bakuriu