2010-11-12 3 views
2

Les données:Comment puis-je concaténer de manière optimale une liste de caractères à une chaîne?

list = ['a','b','x','d','s'] 

Je veux créer une chaîne str = "abxds". Comment puis je faire ça?

En ce moment je suis en train de faire quelque chose comme:

str = "" 
for i in list: 
    str = str + i 
print(str) 

Je sais que les chaînes sont immuables en Python et cela va créer 7 objet chaîne. Et cela sort de ma mémoire quand je le fais des milliers de fois.

Existe-t-il un moyen plus efficace de le faire?

+2

Vous devriez éviter d'utiliser « la liste » comme le nom de votre liste comme liste est intégré (et même pour "str") – Noah

+1

Les objets 'str' sont _immutable_ en Python, c'est pourquoi il crée un nouvel objet' str' pour chaque opération de concaténation. –

+0

je suis désolé, la faute de frappe, les chaînes sont immuables – rda3mon

Répondre

10
>>> theListOfChars = ['a', 'b', 'x', 'd', 's'] 
>>> ''.join(theListOfChars) 
'abxds' 

BTW, ne pas utiliser list ou str comme noms de variables comme ils sont des noms de fonctions intégrées déjà.

(De plus, il n'y a pas char en Python. Un « caractère » est juste une chaîne de longueur 1. Ainsi, la méthode fonctionne ''.join pour la liste des chaînes aussi bien.)

+0

Est-ce la méthode la plus efficace là-bas? – rda3mon

+0

Différence de vitesse: sans jointure: 1.01871395111 avec jointure: 0.609759092331 – rda3mon

+0

@Ringo: Pour un code Python pur, oui. – kennytm

2

La chose que vous cherchez est str.join():

>>> L = ['a','b','x','d','s'] 
>>> ''.join(L) 
'abxds' 

(. ne pas nommer votre variable list, c'est un nom builtin)

3

réponse de KennyTM est grande. En outre, si vous voulez les faire séparés par des virgules ou quelque chose, ce serait:

",".join(characterlist) 

Cela se traduirait par « a, b, x, d, s »

Questions connexes