# Python strings and integer concatenation

## Question:

I want to create a string using an integer appended to it, in a for loop. Like this:

``````for i in range(1, 11):
string = "string" + i
``````

But it returns an error:

TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’

What’s the best way to concatenate the string and integer?

``````for i in range (1,10):
string="string"+str(i)
``````

To get `string0, string1 ..... string10`, you could do like

``````>>> ["string"+str(i) for i in range(11)]
['string0', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string8', 'string9', 'string10']
``````
``````for i in range[1,10]:
string = "string" + str(i)
``````

The `str(i)` function converts the integer into a string.

``````string = 'string%d' % (i,)
``````
``````for i in range(11):
string = "string{0}".format(i)
``````

You did (`range[1,10]`):

• a TypeError since brackets denote an index (`a[3]`) or a slice (`a[3:5]`) of a list,
• a SyntaxError since `[1,10]` is invalid, and
• a double off-by-one error since `range(1,10)` is `[1, 2, 3, 4, 5, 6, 7, 8, 9]`, and you seem to want `[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`

And `string = "string" + i` is a TypeError since you can’t add an integer to a string (unlike JavaScript).

Look at the documentation for Python’s new string formatting method. It is very powerful.

## NOTE:

The method used in this answer (backticks) is deprecated in later versions of Python 2, and removed in Python 3. Use the `str()` function instead.

You can use:

``````string = 'string'
for i in range(11):
string +=`i`
print string
``````

It will print `string012345678910`.

To get `string0, string1 ..... string10` you can use this as YOU suggested:

``````>>> string = "string"
>>> [string+`i` for i in range(11)]
``````

# For Python 3

You can use:

``````string = 'string'
for i in range(11):
string += str(i)
print string
``````

It will print `string012345678910`.

To get `string0, string1 ..... string10`, you can use this as YOU suggested:

``````>>> string = "string"
>>> [string+str(i) for i in range(11)]
``````

If we want output like `'string0123456789'` then we can use the map function and join method of string.

``````>>> 'string' + "".join(map(str, xrange(10)))
'string0123456789'
``````

If we want a list of string values then use the list comprehension method.

``````>>> ['string'+i for i in map(str,xrange(10))]
['string0', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string8', 'string9']
``````

Note:

Use xrange() for Python 2.x.

Use range() for Python 3.x.

You can use a generator to do this!

``````def sequence_generator(limit):
""" A generator to create strings of pattern -> string1,string2..stringN """
inc  = 0
while inc < limit:
yield 'string' + str(inc)
inc += 1

# To generate a generator. Notice I have used () instead of []
a_generator  =  (s for s in sequence_generator(10))

# To generate a list
a_list  =  [s for s in sequence_generator(10)]

# To generate a string
a_string =  '['+ ", ".join(s for s in sequence_generator(10)) + ']'
``````

Concatenation of a string and integer is simple:
just use

``````abhishek+str(2)
``````

I did something else.

I wanted to replace a word, in lists of lists, that contained phrases.

I wanted to replace that string / word with a new word that will be a join between string and number, and that number / digit will indicate the position of the phrase / sublist / lists of lists.

That is, I replaced a string with a string and an incremental number that follow it.

``````myoldlist_1 = [[' myoldword'], [''], ['tttt myoldword'], ['jjjj ddmyoldwordd']]
No_ofposition = []
mynewlist_2 = []
for i in xrange(0, 4, 1):
mynewlist_2.append([x.replace('myoldword', "%s" % i + "_mynewword") for x in myoldlist_1[i]])
if len(mynewlist_2[i]) > 0:
No_ofposition.append(i)

mynewlist_2
No_ofposition
``````