2010-04-10 7 views
1

Je veux créer une chaîne S, qui peut être utilisée comme un tableau, car dans chaque élément peut être utilisé séparément en les accédant comme un tableau.comment créer une chaîne qui peut être utilisée comme un tableau en python?

+1

Vous devriez ajouter plus de détails. Les chaînes Python fonctionnent déjà comme des listes. Que voulez-vous exactement? Donnez un exemple, un contexte, un problème, afin que l'on comprenne ce que vous recherchez. –

Répondre

5

C'est ainsi que les chaînes Python fonctionnent déjà:

>>> a = "abcd" 
>>> a[0] 
'a' 
>>> a[2] 
'c' 

Mais gardez à l'esprit que c'est un accès en lecture seule.

3

Vous pouvez convertir une chaîne à une liste de caractères en utilisant list, et d'aller dans l'autre sens utiliser join:

>>> s = 'Hello, world!' 
>>> l = list(s) 
>>> l[7] = 'f' 
>>> ''.join(l) 
'Hello, forld!' 
+0

mais j'ai toujours des erreurs d'indexation de liste. Je voudrais définir la chaîne comme dans C++, où String S, me donne une chaîne S qui peut être utilisée comme un tableau de caractères. – Hick

+1

@mekasperasky: vous ne pouvez pas modifier la chaîne d'origine, vous ne pouvez modifier la liste que pour la convertir en chaîne. Les chaînes sont immuables en Python. La modification d'un caractère dans une chaîne peut être une opération coûteuse car vous devez copier la chaîne entière. –

+2

Si vous obtenez des erreurs d'index, alors vous essayez probablement d'accéder aux caractères à la fin de la chaîne - vous obtiendrez la même erreur si vous utilisez une chaîne ou une liste. C'est un bug dans votre code, pas un problème avec les chaînes ou les listes de Python. Montrez-nous le code! –

0

Je suis un peu surpris que personne ne semble avoir écrit une classe de wrapper "MutableString" populaire pour Python. Je pense que vous voudriez qu'il stocke la chaîne sous forme de liste, la renvoyant via ''.join() et implémente une suite de méthodes incluant celles pour les chaînes (startswith, endswith, isalpha et tous ses semblables et ainsi de suite) et celles pour les listes .

Pour les opérations simples, il suffit d'opérer dans la liste et d'utiliser ''.join() si nécessaire. Cependant, pour quelque chose comme: 'foobar'.replace('oba', 'amca') lorsque vous travaillez avec une représentation de liste devient moche. (that=list(''.join(that).replace(something, it)) ... ou quelque chose comme ça). Le marshaling constant entre les représentations de liste et de chaîne est visuellement distrayant.

+1

Il existe [UserString.MutableString] (http://docs.python.org/library/userdict.html#UserString.MutableString) dans la bibliothèque standard, mais il est lent et obsolète depuis la version 2.6 (supprimé dans la version 3.0). –

+0

Apparemment, le bytearray (séquence mutable d'octets) a été ajouté en 2.6: https://docs.python.org/2/library/functions.html?highlight=bytearray#bytearray –

Questions connexes