我想为字符串中的每个字符添加括号。所以
"HelloWorld"
应该成为:
"[H][e][l][l][o][W][o][r][l][d]"
我使用过这段代码:
word = "HelloWorld"
newWord = ""
for letter in word:
newWord += "[%s]" % letter
这是最简单的方法,但字符串连接非常慢。 有关加快此代码的任何建议。
答案 0 :(得分:5)
>>> 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]'
避免这种情况:
s = ""
for substring in list:
s += substring
请改用s = "".join(list)
。在构建大型字符串时,前者是一个非常常见和灾难性的错误。
答案 1 :(得分:1)
最狡猾的方式可能是生成器理解:
>>> s = "HelloWorld"
>>> "".join("[%s]" % c for c in s)
'[H][e][l][l][o][W][o][r][l][d]'
Ashwini Chaudhary的答案非常相似,但使用了现代(Python3)字符串格式功能。 <{1}}的旧字符串插值仍然可以正常工作,并且更简单。
更具创造性,在每个角色之间插入%
,并用][
围绕它们。我猜测这可能会有点快,因为它没有那么多的字符串插值,但速度不应该是这里的问题。
[]
答案 2 :(得分:1)
如果您担心速度并需要快速实现,请尝试确定将迭代卸载到下划线本机模块的实现。至少在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