![](/img/trans.png)
[英]Which is the most pythonic way of replacing characters which are escaped by duplication?
[英]Pythonic Way of replacing Multiple Characters
我创建了一个一次性功能
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()
但是没有做任何事情。最好有一个内置方法来处理这个问题。我不知道的问题类型,我知道性能改进可以忽略不计。)
输入: 'my \\t\\t\\t test, case \\ntest\\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,您需要import string
并使用string.maketrans
来构建映射。
如果你想排除空白字符本身,那么
wsp = set(wsp) - {' '}
选项2
re.sub
上面的正则表达式将使用re.sub
。
>>> import re
>>> re.sub(r'\s+', '', '\n\ttext \there\r')
'texthere'
然而,表现明智, str.translate
击败了这一手。
改进非常简单:
放下lambda。 str.replace()
方法是一个函数,在你的代码片段的第一行中,你定义了一个调用另一个函数而不是其他函数的函数。 你为什么需要包裹lambda? 同样涉及第二行。
使用返回值。 实际上,在文档中我们看到:
返回字符串的副本,其中所有出现的substring old都替换为new。
所以你可以先做一个replace()
,然后再对获得的结果做第二个。
总而言之,你将拥有:
c = x.replace('\n', '').replace('\t', '').strip()
注意:如果你有很多的字符删除,你最好使用str.translate()
但其中两个str.replace()
是更具可读性。
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.