La meilleure façon d'ajouter une chaîne à une variable de chaîne est d'utiliser +
ou +=
. C'est parce qu'il est lisible et rapide. Ils sont également tout aussi rapides, celui que vous choisissez est une question de goût, ce dernier est le plus courant. Voici les horaires avec le timeit
module:
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
Cependant, ceux qui recommandent d'avoir des listes et de les ajouter, puis de les rejoindre, le font parce que l'ajout d'une chaîne à une liste est probablement très rapide par rapport à l'extension d'une chaîne. Et cela peut être vrai, dans certains cas. Voici, par exemple, un million d'annexes d'une chaîne à un caractère, d'abord à une chaîne, puis à une liste:
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
OK, il s'avère que même lorsque la chaîne résultante a un million de caractères, l'ajout était encore plus rapide.
Essayons maintenant d'ajouter une chaîne longue de mille caractères cent mille fois:
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
La chaîne de fin, par conséquent, finit par faire environ 100 Mo de long. C'était assez lent, l'ajout à une liste était beaucoup plus rapide. Que ce timing n'inclut pas la finale a.join()
. Alors, combien de temps cela prendrait-il?
a.join(a):
0.43739795684814453
Oups. Il s'avère que même dans ce cas, l'ajout / jointure est plus lent.
D'où vient donc cette recommandation? Python 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
Eh bien, l'ajout / jointure est légèrement plus rapide là-bas si vous utilisez des chaînes extrêmement longues (ce que vous n'êtes généralement pas, qu'est-ce que vous auriez une chaîne de 100 Mo en mémoire?)
Mais le vrai point fort est Python 2.3. Où je ne vais même pas vous montrer les horaires, car c'est si lent que ce n'est pas encore fini. Ces tests prennent soudainement quelques minutes . À l'exception de l'ajout / jointure, qui est tout aussi rapide que sous Pythons ultérieurs.
Ouaip. La concaténation des cordes était très lente en Python à l'époque de la pierre. Mais sur 2.4, ce n'est plus le cas (ou du moins Python 2.4.7), donc la recommandation d'utiliser append / join est devenue obsolète en 2008, lorsque Python 2.3 a cessé d'être mis à jour, et vous auriez dû arrêter de l'utiliser. :-)
(Mise à jour: il s'avère que j'ai effectué les tests plus attentivement que l'utilisation +
et +=
est également plus rapide pour deux chaînes sur Python 2.3. La recommandation à utiliser ''.join()
doit être un malentendu)
Cependant, c'est CPython. D'autres implémentations peuvent avoir d'autres préoccupations. Et c'est juste une autre raison pour laquelle l'optimisation prématurée est la racine de tout mal. N'utilisez pas une technique supposée "plus rapide" à moins que vous ne la mesuriez au préalable.
Par conséquent, la "meilleure" version pour effectuer la concaténation de chaînes consiste à utiliser + ou + = . Et si cela s'avère lent pour vous, ce qui est peu probable, faites autre chose.
Alors pourquoi est-ce que j'utilise beaucoup d'ajout / jointure dans mon code? Parce que parfois, c'est en fait plus clair. Surtout quand tout ce que vous devez concaténer ensemble doit être séparé par des espaces, des virgules ou des sauts de ligne.