web-dev-qa-db-fra.com

Python Concaténation de chaînes et d'entiers

Je veux créer une chaîne en utilisant un entier ajouté, dans une boucle for. Comme ça:

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

Mais cela retourne une erreur:

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

Quelle est la meilleure façon de concaténer String et Integer?

322
michele

REMARQUE:

La méthode utilisée dans cette réponse (backticks) est obsolète dans les versions ultérieures de Python 2 et supprimée dans Python 3. Utilisez plutôt la fonction str() .


Vous pouvez utiliser :

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

Il imprimera string012345678910.

Pour obtenir string0, string1 ..... string10, vous pouvez l'utiliser comme @YOU vous l'a suggéré.

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

Mise à jour selon Python3

Vous pouvez utiliser :

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

Il imprimera string012345678910.

Pour obtenir string0, string1 ..... string10, vous pouvez l'utiliser comme @YOU vous l'a suggéré.

>>> string = "string"
>>> [string+str(i) for i in range(11)]
235
for i in range (1,10):
    string="string"+str(i)

Pour obtenir string0, string1 ..... string10, vous pouvez faire comme

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

La fonction str(i) convertit l'entier en chaîne.

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

Ce que vous avez fait (range[1,10]) est

  • une erreur TypeError puisque les crochets désignent un index (a[3]) ou une tranche (a[3:5]) d'une liste,
  • une SyntaxError puisque [1,10] n'est pas valide, et
  • une erreur double off-by-one puisque range(1,10) est [1, 2, 3, 4, 5, 6, 7, 8, 9], et vous semblez vouloir [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Et string = "string" + i est un TypeError car vous ne pouvez pas ajouter un entier à une chaîne (contrairement à JavaScript).

Regardez la documentation de la nouvelle méthode de formatage de chaîne de Python , elle est très puissante.

18
Tim Pietzcker

Vous pouvez utiliser un générateur pour le faire!

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

Si nous voulons une sortie telle que 'string0123456789', nous pouvons utiliser la méthode map function et join de chaîne.

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

Si nous voulons une liste de valeurs de chaînes, utilisez la méthode list comprehension.

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

Note:

Utilisez xrange() pour Python 2.x

UTILISER range() pour Python 3.x

1
Vivek Sable

J'ai fait autre chose. Je voulais remplacer un mot, dans des listes de listes, qui contenait des phrases. Je voulais remplacer ce mot/mot par un nouveau mot qui sera une jointure entre chaîne et nombre, et ce nombre/chiffre indiquera la position de la phrase/sous-liste/liste de listes.

C'est-à-dire que j'ai remplacé une chaîne par une chaîne et un nombre incrémental qui la suit.

    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
1