替换多个字符的Pythonic方法

2024-05-29 08:17:28 发布

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

我创建了一个一次性函数

a = lambda x: x.replace('\n', '')
b = lambda y: y.replace('\t', '').strip()
c = lambda x: b(a(x))

有没有一个Python式的紧凑式的方式(一个班轮?)以提高可读性和性能。主要是性能。你知道吗

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

输入: 'my \t\t\t test, case \ntest\n LoremIpsum'

期望输出: 'my test, case test LoremIpsum'


Tags: 方法lambda函数testmy方式性能内置
2条回答

改进非常简单:

删除lambdas。str.replace()方法是一个函数,在代码段的第一行中定义了一个函数,该函数只调用另一个函数而不调用其他函数。你为什么要包羊肉?第二条线也是如此。你知道吗

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

Return a copy of the string with all occurrences of substring old replaced by new.

所以你可以做第一个replace(),然后对得到的结果做第二个。你知道吗

总而言之,您将拥有:

c = x.replace('\n', '').replace('\t', '').strip()

注意:如果要删除很多字符,最好使用str.translate(),但对于其中两个字符,str.replace()的可读性要高得多。你知道吗

干杯!你知道吗

选项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,需要import 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轻而易举地解决了这个问题。你知道吗

相关问题 更多 >

    热门问题