[英]Put a symbol before and after each character in a string
我想为字符串中的每个字符添加括号。 所以
"HelloWorld"
应成为:
"[H][e][l][l][o][W][o][r][l][d]"
我用过这段代码:
word = "HelloWorld"
newWord = ""
for letter in word:
newWord += "[%s]" % letter
这是最简单的方法,但字符串连接非常慢。 有关加快此代码的任何建议。
>>> s = "HelloWorld"
>>> ''.join('[{}]'.format(x) for x in s)
'[H][e][l][l][o][W][o][r][l][d]'
如果字符串很大,那么使用带有列表str.join
比使用生成器表达式( https://stackoverflow.com/a/9061024/846892 )更快且内存效率更高:
>>> ''.join(['[{}]'.format(x) for x in s])
'[H][e][l][l][o][W][o][r][l][d]'
从Python性能提示 :
避免这个:
s = ""
for substring in list:
s += substring
请改用s = "".join(list)
。 在构建大型字符串时,前者是一个非常常见和灾难性的错误。
最Python的方式可能是通过生成器理解:
>>> s = "HelloWorld"
>>> "".join("[%s]" % c for c in s)
'[H][e][l][l][o][W][o][r][l][d]'
Ashwini Chaudhary的答案非常相似,但使用了现代(Python3)字符串格式函数。 使用%
的旧字符串插值仍然可以正常工作,并且更简单。
更具创造力的是,在每个字符之间插入][
,并用[]
括起来。 我想这可能会快一些,因为它没有那么多的字符串插值,但速度不应该是一个问题。
>>> "[" + "][".join(s) + "]"
'[H][e][l][l][o][W][o][r][l][d]'
如果您担心速度并需要快速实现,请尝试确定将迭代卸载到下划线本机模块的实现。 至少在CPython中这是事实。
建议的实施
"[{}]".format(']['.join(s))
产量
'[H][e][l][l][o][W][o][r][l][d]'
与竞争解决方案相比
In [12]: s = "a" * 10000
In [13]: %timeit "[{}]".format(']['.join(s))
1000 loops, best of 3: 215 us per loop
In [14]: %timeit ''.join(['[{}]'.format(x) for x in s])
100 loops, best of 3: 3.06 ms per loop
In [15]: %timeit ''.join('[{}]'.format(x) for x in s)
100 loops, best of 3: 3.26 ms per loop
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.