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?
69 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)] 8for 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'] 5for i in range[1,10]: string = "string" + str(i) The str(i) function converts the integer into a string.
string = 'string%d' % (i,) 2for 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.
1You 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)) + ']' 0If 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.
1I 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