Iterar sobre una cadena
En C++, puedo iterar sobre un std::string
así:
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?
7 answers
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 file (y abre el archivo), iterando sobre él iterando sobre líneas en ese archivo
for line in open(filename):
# do something with line
Si eso parece magia, bueno, un poco lo es, pero la idea detrás de esto es realmente simple.
Hay un protocolo iterador simple que se puede aplicar a cualquier tipo de objeto para hacer que el bucle for
funcione se.
Simplemente implemente un iterador que defina un método next()
, e implemente un método __iter__
en una clase para que sea iterable. (el __iter__
por supuesto, debe devolver un objeto iterador, es decir, un objeto que define next()
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-11 19:46:46
Si necesita acceso al índice mientras itera a través de la cadena, use enumerate()
:
>>> for i, c in enumerate('test'):
... print i, c
...
0 t
1 e
2 s
3 t
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-28 16:54:32
Aún más fácil:
for c in "test":
print c
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-02 16:19:13
Solo para hacer una respuesta más completa, la forma 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-17 05:36:55
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 uno y luego unir la lista resultante de caracteres en una cadena.
Una cadena es inherentemente una lista de caracteres, por lo tanto 'map' iterará sobre la cadena - como segundo argumento - aplicando la función - el primer argumento - a cada uno.
Por ejemplo, aquí utilizo un enfoque lambda simple ya que todo lo que quiero hacer es una modificación trivial al 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-18 11:11:28
Varias respuestas aquí usan range
. xrange
es generalmente mejor, ya que devuelve un generador, en lugar de una lista completamente instanciada. Donde la memoria y / o iterables de longitudes muy variables pueden ser un problema, xrange
es superior.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-27 03:20:27
Bueno, también puedes hacer algo interesante como esto y hacer tu trabajo usando for loop
#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
M r . S u r y a a
Sin embargo, desde range () crear una lista de los valores que es la secuencia por lo que puede utilizar 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 Funciones tow Built in (BIFs 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 una cadena dada
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-21 17:19:17