# Python String and Integer concatenation

## The Question :

351 people think this question is useful

I want to create string using 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?

• Shouldnt it be range(1,10)?
• Your question is unclear. What is it the output you want to get? string = "string10"? string = "string1string2string3string4string5string6string7string8string9string10"? Ten different variables?
• @stephan: +1, but it should be range(1,11) 🙂
• @Tim: maybe even range(11) looking at the comment…
• @michele Any chance you can change the accepted answer on this question? Backticks are deprecated and should not be used.

270 people think this answer is useful

## 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)]



# Update as per Python3

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)]



268 people think this answer is useful
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']



35 people think this answer is useful
string = 'string%d' % (i,)



35 people think this answer is useful
for i in range[1,10]:
string = "string" + str(i)



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

21 people think this answer is useful
for i in range(11):
string = "string{0}".format(i)



What you did (range[1,10]) is

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

4 people think this answer is useful

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))+']'



1 people think this answer is useful

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

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



If we want List of string values then use 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

1 people think this answer is useful

I did something else. I wanted to replace a word, in lists off lists, that contained phrases. I wanted to replace that sttring / 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



abhishek+str(2)
`