簡體   English   中英

在字符串中的每個字符前后放置一個符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM