una - python separar string por caracter
Iterando cada carácter en una cadena usando Python (8)
Aún más fácil:
for c in "test":
print c
En C ++, puedo iterar sobre una std::string
como esta:
std::string str = "Hello World!";
for (int i = 0; i < str.length(); ++i)
{
std::cout << str[i] << std::endl;
}
¿Cómo itero sobre una cadena en Python?
Bueno, también puedes hacer algo interesante como esto y hacer tu trabajo usando para bucle
#suppose you have variable name
name = "Mr.Suryaa"
for index in range ( len ( name ) ):
print ( name[index] ) #just like c and c++
La respuesta es
Señor . S uryaa
Sin embargo, dado que range () crea una lista de valores que es secuencia, puede usar directamente el nombre
for e in name:
print(e)
Esto también produce el mismo resultado y también se ve mejor y funciona con cualquier secuencia como lista, tupla y diccionario.
Hemos utilizado arrastrar funciones incorporadas (BIF en la comunidad Python)
1) range () - range () BIF se usa para crear índices Ejemplo
for i in range ( 5 ) :
can produce 0 , 1 , 2 , 3 , 4
2) len () - len () BIF se usa para averiguar la longitud de la cadena dada
Como Johannes señaló,
for c in "string":
#do something with c
Puedes iterar casi cualquier cosa en Python usando la construcción for loop
,
por ejemplo, open("file.txt")
devuelve un objeto de archivo (y abre el archivo), iterando sobre él itera sobre líneas en ese archivo
with open(filename) as f:
for line in f:
# do something with line
Si eso parece magia, bueno, lo es, pero la idea que hay detrás es realmente simple.
Hay un protocolo de iterador simple que se puede aplicar a cualquier tipo de objeto para hacer que el bucle for
funcione en él.
Simplemente implemente un iterador que defina un método next()
, e implemente un método __iter__
en una clase para hacerlo iterable. (el __iter__
por supuesto, debe devolver un objeto iterador, es decir, un objeto que define next()
)
Puede usar literales de cadena con formato ( PEP498 ; Pyton 3.6+) con print
y secuencia de desempaquetado y enumerate
:
print(*(f''{idx} {char}'' for idx, char in enumerate(''Hello!'')), sep=''/n'')
0 H
1 e
2 l
3 l
4 o
5 !
Si los valores de tuple
impresión son suficientes, no hay necesidad de la expresión del generador:
print(*enumerate(''Hello!''), sep=''/n'')
(0, ''H'')
(1, ''e'')
(2, ''l'')
(3, ''l'')
(4, ''o'')
(5, ''!'')
Si desea utilizar un enfoque más funcional para iterar sobre una cadena (tal vez para transformarla de alguna manera), puede dividir la cadena en caracteres, aplicar una función a cada una y luego unir la lista resultante de caracteres en una cadena.
Una cadena es inherentemente una lista de caracteres, por lo tanto, ''map'' se repetirá sobre la cadena, como segundo argumento, aplicando la función, el primer argumento, a cada una.
Por ejemplo, aquí utilizo un enfoque lambda simple, ya que todo lo que quiero hacer es una modificación trivial del carácter: aquí, para incrementar el valor de cada carácter:
>>> ''''.join(map(lambda x: chr(ord(x)+1), "HAL"))
''IBM''
o más generalmente:
>>> ''''.join(map(my_function, my_string))
donde my_function toma un valor char y devuelve un valor char.
Si necesita acceder al índice a medida que recorre la cadena, use enumerate()
:
>>> for i, c in enumerate(''test''):
... print i, c
...
0 t
1 e
2 s
3 t
Solo para hacer una respuesta más completa, la forma en C de iterar sobre una cadena puede aplicarse en Python, si realmente quieres forzar una clavija cuadrada en un agujero redondo.
i = 0
while i < len(str):
print str[i]
i += 1
Pero, de nuevo, ¿por qué hacer eso cuando las cadenas son inherentemente iterables?
for i in str:
print i
Varias respuestas aquí usan range
. xrange
es mejor ya que devuelve un generador, en lugar de una lista completamente instanciada. Donde la memoria y / o los iterables de diferentes longitudes pueden ser un problema, xrange
es superior.