web-dev-qa-db-fra.com

Comment diviser une chaîne en tableau de caractères?

J'ai essayé de chercher sur le Web des réponses pour diviser une chaîne en un tableau de caractères, mais je n'arrive pas à trouver une méthode simple.

str.split(//) ne semble pas fonctionner comme Ruby. Existe-t-il un moyen simple de le faire sans boucler?

401
Adrian
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']

Vous avez besoin de liste

791
user225312

Vous prenez la chaîne et la passez à list ()

s = "mystring"
l = list(s)
print l
66
Senthil Kumaran

Vous pouvez aussi le faire de cette manière très simple sans list ():

>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
58
Lewis James-Odwin

Si vous souhaitez traiter votre chaîne un caractère à la fois. vous avez différentes options.

uhello = u'Hello\u0020World'

tilisation de la compréhension de la liste:

print([x for x in uhello])

Sortie:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

tilisation de la carte:

print(list(map(lambda c2: c2, uhello)))

Sortie:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

Appel de la fonction de liste intégrée:

print(list(uhello))

Sortie:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

tilisation de for loop:

for c in uhello:
    print(c)

Sortie:

H
e
l
l
o

W
o
r
l
d
35
Sid

J'ai exploré deux autres façons d'accomplir cette tâche. Cela peut être utile pour quelqu'un.

Le premier est facile:

In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']

Et le second utilise la fonction map et lambda. Cela peut être approprié pour des tâches plus complexes:

In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']

Par exemple

# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']

Voir documentation python pour plus de méthodes

20
Alexey Milogradov

La tâche se résume à parcourir plusieurs caractères de la chaîne et à les rassembler dans une liste. La solution la plus naïve ressemblerait à

result = []
for character in string:
    result.append(character)

Bien sûr, il peut être réduit à seulement

result = [character for character in string]

mais il existe encore des solutions plus courtes qui font la même chose.

list constructeur peut être utilisé pour convertir n'importe quel itérable (itérateurs, listes, tuples, chaînes, etc. .) lister.

>>> list('abc')
['a', 'b', 'c']

Le gros avantage est que cela fonctionne de la même manière dans Python 2 et Python 3.

De plus, à partir de Python 3.5 (grâce à l’impressionnant PEP 448 ), il est maintenant possible de construire une liste à partir de n’importe quelle variable en la décompressant dans un littéral de liste vide:

>>> [*'abc']
['a', 'b', 'c']

C’est plus simple et, dans certains cas, plus efficace que d’appeler directement le constructeur list.

Je vous déconseille d'utiliser les approches map-, car map ne ne renvoie pas une liste dans Python 3. Voir Comment utiliser les filtres, mapper et réduire dans Python.

17
vaultah

facile:

s = 'My'    
print(list(s))
14
djangodude

Si vous avez juste besoin d'un tableau de caractères:

arr = list(str)

Si vous voulez diviser la chaîne par une chaîne particulière:

# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")
10
A.Safari

split() la fonction incorporée ne séparera la valeur que sur la base de certaines conditions, mais dans le mot unique, elle ne pourra pas remplir la condition. Donc, cela peut être résolu à l'aide de list(). Il appelle en interne le tableau et stocke la valeur sur la base d'un tableau.

Supposer,

a = "bottle"
a.split() // will only return the Word but not split the every single char.

a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']
8
Anshul Singh Suryan

Si vous souhaitez uniquement accéder à la chaîne en lecture, vous pouvez utiliser directement la notation de tableau.

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> t = 'my string'
>>> t[1]
'y'

Pourrait être utile pour tester sans utiliser regexp. La chaîne contient-elle une fin de ligne?

>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True
3
Sylvain

Eh bien, bien que la version (s) de la liste me plaise, voici une autre manière plus verbeuse que j’ai trouvée (mais c’est cool, j’ai donc pensé l’ajouter à la mêlée):

>>> text = "My hovercraft is full of eels"
>>> [text[i] for i in range(len(text))]
['M', 'y', ' ', 'h', 'o', 'v', 'e', 'r', 'c', 'r', 'a', 'f', 't', ' ', 'i', 's', ' ', 'f', 'u', 'l', 'l', ' ', 'o', 'f', ' ', 'e', 'e', 'l', 's']
2
John Lockwood
from itertools import chain

string = 'your string'
chain(string)

semblable à list(string) mais renvoie un générateur qui est évalué paresseusement au point d'utilisation, donc efficace en mémoire.

2
minggli
>>> for i in range(len(a)):
...     print a[i]
... 

où a est la chaîne que vous souhaitez séparer. Les valeurs "a [i]" sont le caractère individuel de la chaîne. Elles pourraient être ajoutées à une liste.

0
Abass Sesay