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?
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
Vous avez besoin de liste
Vous prenez la chaîne et la passez à list ()
s = "mystring"
l = list(s)
print l
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']
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
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
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.
facile:
s = 'My'
print(list(s))
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("//")
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']
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
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']
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.
>>> 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.