Python Strings and Integer Concatenation [Duplicate]

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?

6

9 Answers

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)]
8
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']
5
for i in range[1,10]: 
  string = "string" + str(i)

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

0
string = 'string%d' % (i,)
2
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.

1

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

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.

1

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

Concatenation of a string and integer is simple: just use

abhishek+str(2)
1
Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest