Intenté buscar respuestas en la web para dividir una cadena en una serie de caracteres, pero parece que no puedo encontrar un método simple
str.split(//)
no parece funcionar como lo hace Ruby. ¿Hay una manera simple de hacer esto sin bucle?
Intenté buscar respuestas en la web para dividir una cadena en una serie de caracteres, pero parece que no puedo encontrar un método simple
str.split(//)
no parece funcionar como lo hace Ruby. ¿Hay una manera simple de hacer esto sin bucle?
Respuestas:
>>> s = "foobar"
>>> list(s)
['f', 'o', 'o', 'b', 'a', 'r']
Necesitas lista
cast_method = lambda x: [x]
Tomas la cadena y la pasas a list ()
s = "mystring"
l = list(s)
print l
También puede hacerlo de esta manera muy simple sin list ():
>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']
for
, no hay mucho que explicar. Creo que debería leer el tutorial de Python sobre estructuras de datos , especialmente la comprensión de listas.
list(map(lambda c: c, iter("foobar")))
, pero más legible y significativo.
Si quieres procesar tu 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']
Llamada a la función de lista incorporada:
print(list(uhello))
Salida:
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
Utilizando for loop:
for c in uhello:
print(c)
Salida:
H
e
l
l
o
W
o
r
l
d
Exploré otras dos formas de lograr 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 el segundo uso map
y lambda
función. 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 recopilarlos en una lista. La solución más ingenua serí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
El constructor se puede utilizar para convertir cualquier iterable (iteradores, listas, tuplas, cadenas, etc.) a la lista.
>>> list('abc')
['a', 'b', 'c']
La gran ventaja es que funciona igual en Python 2 y Python 3.
Además, a partir de Python 3.5 (gracias al impresionante PEP 448 ) ahora es posible construir una lista desde cualquier iterable desempacándola en una lista vacía literal:
>>> [*'abc']
['a', 'b', 'c']
Esto es más ordenado y, en algunos casos, más eficiente que llamar al list
constructor directamente.
Yo le aconsejaría contra el uso de map
enfoques basados, porque map
no no devolver una lista en Python 3. Véase Cómo el uso de filtro, mapa, y reducir en Python 3 .
split()
la función incorporada solo separará el valor en función 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 función de 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']
Descomprimirlos:
word = "Paralelepipedo"
print([*word])
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
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']
camelcase = ''.join([text[i].upper() if i % 2 else text[i].lower() for i in range(len(text))])
>>> 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 puede agregar a una lista.
for c in a: print c
es mucho más directo