替换多个字符的python方法

替换多个字符的python方法,python,string,Python,String,我创建了一个一次性函数 a = lambda x: x.replace('\n', '') b = lambda y: y.replace('\t', '').strip() c = lambda x: b(a(x)) 是否有一种Pythonic和紧凑的方式(一行?)来提高可读性和性能。主要是表演 (注意:我知道我可以做lambda x:x.replace('\n').replace('\t\).strip(),但什么都不做。最好有一个内置的方法来处理我不知道的这类问题,而且我知道性能改进可以

我创建了一个一次性函数

a = lambda x: x.replace('\n', '')
b = lambda y: y.replace('\t', '').strip()
c = lambda x: b(a(x))
是否有一种Pythonic和紧凑的方式(一行?)来提高可读性和性能。主要是表演

(注意:我知道我可以做
lambda x:x.replace('\n').replace('\t\).strip()
,但什么都不做。最好有一个内置的方法来处理我不知道的这类问题,而且我知道性能改进可以忽略不计。)

输入:
“我的\t\t\t测试,案例测试\n LoremIpsum”

期望输出:
'my test,case test LoremIpsum'
选项1
str.translate

对于初学者来说,如果你要用相同的东西替换很多字符,我100%推荐
str.translate

>>> from string import whitespace as wsp
>>> '\n\ttext   \there\r'.translate(str.maketrans(dict.fromkeys(wsp, '')))
'texthere'
此语法仅对python-3.x有效。对于python-2.x,您将需要
导入string
并使用
string.maketrans
来构建映射

如果要排除空白字符本身,则

wsp = set(wsp) - {' '}

选项2
re.sub

上述regex等价物将使用
re.sub

>>> import re
>>> re.sub(r'\s+', '', '\n\ttext   \there\r')
'texthere'

然而,就性能而言,
str.translate
可以轻而易举地解决这个问题。

改进非常简单:

删除lambdas。
str.replace()
方法是一个函数,在代码段的第一行,您定义了一个函数,该函数只调用另一个函数,而不调用其他函数。你为什么需要包装兰姆达?第二行也是如此

使用返回值。实际上,在我们看到:

返回一个字符串的副本,其中所有出现的子字符串old都替换为new

因此,您可以先执行第一个
replace()
,然后对获得的结果执行第二个

总之,您将有:

c = x.replace('\n', '').replace('\t', '').strip()
注意:如果您有许多字符要删除,最好使用
str.translate()
,但对于其中两个字符,
str.replace()
更具可读性


干杯

你能提供一些背景资料来说明最终的结果吗?最初的想法是将要删除的字符列表传递给函数。“my\t test\n text”输出:“my test text”另外,一个更通用的正则表达式等价物,它不专门依赖元类,例如
\s
,将使用
[…]
作为要删除的特定字符的自定义列表。(但我喜欢你使用
translate
更多!)@usr2564301当然,如果OP想定制替换字符,字符类将是一个不错的选择。选项1也需要类似的东西。是的,我在考虑regex,但由于性能原因,我想要另一个解决方案。另外,请注意,我不想将“”替换为空间字符本身。若你们能编辑第一个方法来做这件事,那个就太棒了。@cᴏʟᴅsᴘᴇᴇᴅ 不,谢谢。你太棒了,你对你的答案反应非常积极和勤奋,我很感激@同样,感谢您为社区做出的贡献!干杯。我理解这一点,但显然,我想要一个紧凑的解决方案,这就是为什么我使用lambdas作为一种直观地将这些方法应用于字符串的方法。谢谢你的回答。