Comment diviser une chaîne en utilisant un séparateur vide en Python

Qu'est-ce qu'un bon moyen de faire some_string.split('') en python? Cette syntaxe donne une erreur:

a = '1111'
a.split('')

ValueError: empty separator

Je voudrais obtenir:

['1', '1', '1', '1']
21
demandé sur Saullo G. P. Castro 2013-06-29 17:14:14

4 réponses

Utiliser list():

>>> list('1111')
['1', '1', '1', '1']

Alternativement, vous pouvez utiliser map():

>>> map(None, '1111')
['1', '1', '1', '1']

Différences de Temps:

$ python -m timeit "list('1111')"
1000000 loops, best of 3: 0.483 usec per loop
$ python -m timeit "map(None, '1111')"
1000000 loops, best of 3: 0.431 usec per loop
33
répondu TerryA 2013-06-29 13:22:14

On peut lancer des chaînes pour lister directement

>>> list('1111')
['1', '1', '1', '1']

Ou en utilisant des compréhensions de liste

>>> [i for i in '1111']
['1', '1', '1', '1']

La deuxième façon peut être utile si l'on veut diviser des chaînes pour des sous-chaînes de plus de 1 Longueur de symbole

>>> some_string = '12345'
>>> [some_string[i:i+2] for i in range(0, len(some_string), 2)]
['12', '34', '5']
4
répondu oleg 2013-06-29 13:19:07

Les chaînes sont itérables et peuvent être indexées, donc vous n'avez pas vraiment besoin de les diviser du tout:

>>> for char in '11111':
...   print char
... 
1
1
1
1
1
>>> '11111'[4]
'1'

Vous pouvez le "diviser" avec un appel à list, mais cela ne fait pas beaucoup de différence:

>>> for char in list('11111'):
...   print char
... 
1
1
1
1
1
>>> list('11111')[4]
'1'

Vous n'avez donc besoin de le faire que si votre code attend explicitement une liste. Par exemple:

>>> list('11111').append('2')
>>> l = list('11111')
>>> l.append(2)
>>> l
['1', '1', '1', '1', '1', 2]

Cela ne fonctionne pas avec une chaîne droite:

>>> l.append('2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'

Dans ce cas, vous auriez besoin de:

>>> l += '2'
>>> l
'111112'
3
répondu Lennart Regebro 2013-06-29 13:59:10

Méthode # 1:

s="Amalraj"
l=[i for i in s]
print(l)

Sortie:

['A', 'm', 'a', 'l', 'r', 'a', 'j']

Méthode # 2:

s="Amalraj"
l=list(s)
print(l)

Sortie:

['A', 'm', 'a', 'l', 'r', 'a', 'j']

Méthode # 3:

import re; # importing regular expression module
s="Amalraj"
l=re.findall('.',s)
print(l)

Sortie:

['A', 'm', 'a', 'l', 'r', 'a', 'j']
1
répondu Amalraj Victory 2017-06-04 16:39:39