Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Put a symbol before and after each character in a string

Tags:

python

string

I would like to add brackets to each character in a string. So

"HelloWorld"

should become:

"[H][e][l][l][o][W][o][r][l][d]"

I tried a straightforward loop:

word = "HelloWorld"
newWord = ""
for letter in word:
    newWord += "[%s]" % letter

But can I do it more efficiently? I'm concerned about the repeated string concatenations.


See also: How to insert a character after every 2 characters in a string — note that techniques based on .join will not add anything before the first (or after the last) character, unless explicitly separately added.

like image 952
Mehdi Nellen Avatar asked Oct 27 '25 03:10

Mehdi Nellen


2 Answers

>>> s = "HelloWorld"
>>> ''.join('[{}]'.format(x) for x in s)
'[H][e][l][l][o][W][o][r][l][d]'

If string is huge then using str.join with a list comprehension will be faster and memory efficient than using a generator expression(https://stackoverflow.com/a/9061024/846892):

>>> ''.join(['[{}]'.format(x) for x in s])
'[H][e][l][l][o][W][o][r][l][d]'

From Python performance tips:

Avoid this:

s = ""
for substring in list:
    s += substring

Use s = "".join(list) instead. The former is a very common and catastrophic mistake when building large strings.

like image 138
Ashwini Chaudhary Avatar answered Oct 30 '25 03:10

Ashwini Chaudhary


The most pythonic way would probably be with a generator comprehension:

>>> s = "HelloWorld"
>>> "".join("[%s]" % c for c in s)
'[H][e][l][l][o][W][o][r][l][d]'

Ashwini Chaudhary's answer is very similar, but uses the modern (Python3) string format function. The old string interpolation with % still works fine and is a bit simpler.

A bit more creatively, inserting ][ between each character, and surrounding it all with []. I guess this might be a bit faster, since it doesn't do as many string interpolations, but speed shouldn't be an issue here.

>>> "[" + "][".join(s) + "]"
'[H][e][l][l][o][W][o][r][l][d]'
like image 31
jdm Avatar answered Oct 30 '25 05:10

jdm



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!