python - separar - ¿Cómo dividir una cadena en una matriz de caracteres?
separar palabra en letras python (12)
Bueno, por mucho que me guste la versión de la (s) lista (s), aquí hay otra forma más detallada que encontré (pero es genial, así que pensé en agregarla a la refriega):
>>> 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'']
He intentado buscar en la web respuestas para dividir una cadena en una serie de caracteres, pero parece que no encuentro un método simple
str.split(//)
no parece funcionar como lo hace Ruby. ¿Hay una manera simple de hacer esto sin hacer un bucle?
Exploré otras dos formas de realizar esta tarea. Puede ser útil para alguien.
El primero es facil:
In [25]: a = []
In [26]: s = ''foobar''
In [27]: a += s
In [28]: a
Out[28]: [''f'', ''o'', ''o'', ''b'', ''a'', ''r'']
Y la segunda usa el map
y la función lambda
. Puede ser apropiado para tareas más complejas:
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'']
Por ejemplo
# 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'', '''', '''']
Ver documentos de Python para más métodos
La tarea se reduce a iterar sobre los caracteres de la cadena y agruparlos en una lista. La solución más ingenua se vería
result = []
for character in string:
result.append(character)
Por supuesto, se puede acortar a solo
result = [character for character in string]
Pero todavía hay soluciones más cortas que hacen lo mismo.
list
constructor de list
se puede utilizar para convertir cualquier iterable (iteradores, listas, tuplas, cadenas, etc.) en listas.
>>> list(''abc'')
[''a'', ''b'', ''c'']
La gran ventaja es que funciona igual tanto en Python 2 como en Python 3.
Además, a partir de Python 3.5 (gracias al increíble PEP 448 ) ahora es posible construir una lista de cualquier iterable desempaquetándola en un literal de lista vacía:
>>> [*''abc'']
[''a'', ''b'', ''c'']
Esto es más ordenado, y en algunos casos es más eficiente que llamar directamente al constructor de list
.
No recomendaría el uso de enfoques basados en map
, ya que el map
no devuelve una lista en Python 3. Consulte Cómo usar el filtro, el mapa y la reducción en Python 3 .
Si desea leer solo el acceso a la cadena, puede usar la notación de matriz directamente.
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''
Podría ser útil para probar sin usar regexp. ¿La cadena contiene una nueva línea final?
>>> t[-1] == ''/n''
False
>>> t = ''my string/n''
>>> t[-1] == ''/n''
True
Si desea procesar su cadena un carácter a la vez. Tienes varias opciones.
uhello = u''Hello/u0020World''
Usando la comprensión de la lista:
print([x for x in uhello])
Salida:
[''H'', ''e'', ''l'', ''l'', ''o'', '' '', ''W'', ''o'', ''r'', ''l'', ''d'']
Usando el mapa:
print(list(map(lambda c2: c2, uhello)))
Salida:
[''H'', ''e'', ''l'', ''l'', ''o'', '' '', ''W'', ''o'', ''r'', ''l'', ''d'']
Llamando Función de lista incorporada:
print(list(uhello))
Salida:
[''H'', ''e'', ''l'', ''l'', ''o'', '' '', ''W'', ''o'', ''r'', ''l'', ''d'']
Utilizando para bucle:
for c in uhello:
print(c)
Salida:
[''H'', ''e'', ''l'', ''l'', ''o'', '' '', ''W'', ''o'', ''r'', ''l'', ''d'']
También puedes hacerlo de esta manera muy simple sin listar ():
>>> [c for c in "foobar"]
[''f'', ''o'', ''o'', ''b'', ''a'', ''r'']
Tomas la cadena y la pasas a la lista ()
s = "mystring"
l = list(s)
print l
sencillo:
s = ''My''
print(list(s))
split()
incorporada solo separará el valor sobre la base de cierta condición, pero en una sola palabra, no puede cumplir la condición. Por lo tanto, se puede resolver con la ayuda de list()
. Llama internamente a la matriz y almacenará el valor en base a una matriz.
Suponer,
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'']
>>> for i in range(len(a)):
... print a[i]
...
donde a es la cadena que desea separar. Los valores "a [i]" son el carácter individual de la cadena que se podría agregar a una lista.
>>> s = "foobar"
>>> list(s)
[''f'', ''o'', ''o'', ''b'', ''a'', ''r'']
Necesitas list
from itertools import chain
string = ''your string''
chain(string)
similar a la list(string)
pero devuelve un generador que se evalúa perezosamente en el punto de uso, por lo que es eficiente en memoria.