2011-03-08 10 views

Répondre

7

concaténation de chaîne en python est simple

a = "A" 
b = "B" 
c = a + b 
print c 

> AB 

Je benchmarkée les trois opérations , effectuant 1m de chaque:

c = a + b 
c = '%s%s' % (a,b) 
c = "{0}{1}".format(a, b) 

Et le résultat s sont:

+: 0.232225275772 
%s: 0.42436670365 
{}: 0.683854960343 

Même avec 500 chaînes de caractères, + est encore de loin le plus rapide. Mes script is on ideone et les résultats (pour 500 chaînes de char) sont:

+: 0.82 
%s: 1.54 
{}: 2.03 
+0

Et j'ai toujours pensé que la concaténation de chaînes avec signe + était lente. Peut-être parce que les cordes sont trop courtes? –

+0

Peut-être, j'ai téléchargé mon script sur Ideone, où les résultats sont encore plus prononcés: http://ideone.com/a6JMi – fredley

+0

Je ne savais pas que la méthode .format était plus lente que la méthode% de mise en forme. Je pensais que .format était la méthode préférée. Est-ce que c'est toujours plus lent? – Curious2learn

2

Vous pouvez utiliser la version la plus simple: String3 = String1 + String2 ou l'opérateur de format (dépréciée en python3): String3 = '%s%s' % (String1, String2)

+0

Comme il est explicitement étiqueté python-3.x, je supprimerais cette deuxième option. – fredley

+2

@fredley, j'ai lu% ne serait pas retiré de sitôt. Dans le nouveau python 3.2, il reste. – joaquin

+2

Pour Python 3, vous pouvez utiliser 'String3 =" {0} {1} ". Format (String1, String2)'. –

2

En Python, les + concatène opérateur cordes:

>>> String3 = String1 + String2 
>>> String3 
    'AB' 

Ceci est la manière la plus simple et habituellement c'est le bon choix. Cependant, vous aurez parfois besoin de plus de efficient string concatenation.

0

Vous pouvez également essayer str.join():

>>>s1='a' 
>>>s2='b' 
>>>s3=''.join((s1,s2)) 
>>>s3 
'ab' 

aussi si vous écrivez:

>>>s3='WhatEver'.join((s1,s2)) 
>>>s3 
'aWhatEverb' 
0

Pour simplifier lorsque la vitesse n'a pas d'importance, vous ne pouvez pas battre la facilité de c=a+b. Si la vitesse compte (parce que vous faites un grand nombre de concaténations successives, par exemple), str.join()can be a little more efficient (code at ideone).

+: 2.51 

''.join([a,...z]): 0.2 

append(): 2.05 

D'après ce que je peux dire, si vous faites concaténations successives sans toucher le produit intermédiaire, je suis mieux chaque ajout annexant à une liste, puis de rejoindre tout à la fois. Pour le cas de concaténation simple, a+b est toujours plus rapide que a.join(b)

Questions connexes