我已在python 2
中完成此操作:
python 2:
garbled = "IXXX aXXmX aXXXnXoXXXXXtXhXeXXXXrX sXXXXeXcXXXrXeXt mXXeXsXXXsXaXXXXXXgXeX!XX"
message = filter(lambda x: x != 'X', garbled)
print message
结果:
'I am another secret message!'
但在python 3
:
garbled = "IXXX aXXmX aXXXnXoXXXXXtXhXeXXXXrX sXXXXeXcXXXrXeXt mXXeXsXXXsXaXXXXXXgXeX!XX"
message = list(filter(lambda x: x != 'X', garbled))
print(message)
`python 3:
的结果['I', ' ', 'a', 'm', ' ', 'a', 'n', 'o', 't', 'h', 'e', 'r', ' ', 's', 'e', 'c', 'r', 'e', 't', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', '!']
我想知道是否有可能在python 3
python 2
中获得与message
变量without adding
相同的结果{@ 1}}新行到python 3
中的代码{ {1}}。我已经知道join function
了,我想像the python 2 code
中那样直截了当。
答案 0 :(得分:2)
在python 3.X filter()
中返回一个迭代器,当你将它转换为list时,你将得到一个你的角色列表。因此,您可以将迭代器传递给str.join()
方法,以便将过滤后的结果连接在一起:
In [1]: garbled = "IXXX aXXmX aXXXnXoXXXXXtXhXeXXXXrX sXXXXeXcXXXrXeXt mXXeXsXXXsXaXXXXXXgXeX!XX"
In [2]: message = ''.join(filter(lambda x: x != 'X', garbled))
In [3]: message
Out[3]: 'I am another secret message!'
但请注意,使用过滤器不是删除角色的正确方法,而是只需使用str.replace()
:
In [4]: garbled.replace('X', '')
Out[4]: 'I am another secret message!'
这就是str.replace
更加pythonic的原因:
In [5]: %timeit''.join(filter(lambda x: x != 'X', garbled))
100000 loops, best of 3: 8.08 µs per loop
In [6]: %timeit garbled.replace('X', '')
1000000 loops, best of 3: 1.04 µs per loop