pythonstring

Put a symbol before and after each character in a 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.


Solution

  • >>> 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.