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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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)]
Method 2
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']
Method 3
for i in range[1,10]: string = "string" + str(i)
The str(i) function converts the integer into a string.
Method 4
string = 'string%d' % (i,)
Method 5
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.
Method 6
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)) + ']'
Method 7
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.
Method 8
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
Method 9
Concatenation of a string and integer is simple:
just use
abhishek+str(2)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0