Tengo una pregunta sobre la construcción de bucle en Python en la forma de: for x in y:
En mi caso, y es una línea leída de un archivo yx es caracteres separados. Me gustaría poner un espacio después de cada par de caracteres en la salida, como este: aa bb cc dd
etc. Por lo tanto, me gustaría saber la iteración actual. ¿Es posible, o necesito usar un estilo C más tradicional para el ciclo con un índice?para x en y, tipo de iteración en python. ¿Puedo averiguar en qué iteración estoy actualmente?
Respuesta
for i,x in enumerate(y):
....
Uso enumerate
:
for index,x in enumerate(y):
# do stuff, on iteration #index
Alternativamente, basta con crear una variable y se incrementa en el interior del cuerpo del bucle. Sin embargo, esto no es tan 'pitónico'.
cur = 0
for x in y:
cur += 1
# do stuff, on iteration #cur
'cur ++' es tan antipático que da un error de sintaxis, por lo que difícilmente puede recomendarse ;-). Creo que te refieres a 'cur + = 1' (que al menos funciona, aunque es sucio cuando se lo compara con enumerar ;-). –
Gracias. Terminé usando enumerar. Sin embargo, no estoy seguro si hace alguna diferencia, ¿pero quizás el recuento manual sea más claro? Ejem, ok al menos para alguien que no está muy familiarizado con Python, mirando el código. – foo
@ Alex, sí, de hecho acabo de mudarme a un apt. así que estoy un poco agotado ahora mismo. (Y sí, 'enumerar' es mucho más bonito.) – Amber
Si lo que está haciendo es insertar un espacio después de cada par de caracteres, es posible que desee hacer algo con las listas por comprensión como:
' '.join([''.join(characterPair) for characterPair in zip(*[iter(line + ' ')] * 2)])
sin anexar el espacio adicional, el último carácter de las líneas con un número impar de caracteres se eliminarán; con el espacio adjunto, las líneas con un número impar de caracteres tendrán un espacio adicional al final.
(bien puede haber una manera más Pythonic de hacerlo que lo que he hecho.)
Realmente no se puede argumentar que esto es mejor que el método enumerate
, pero es menos evidente a alguien que viene de una perspectiva de C, por lo que pensé en señalarlo esté completo:
from itertools import izip_longest
' '.join(j + k for j,k in izip_longest(fillvalue='', *([iter(line)]*2)))
en Python se prefiere a menudo (o al menos animado a) hacer algo con generadores o listas por comprensión de este tipo, en vez de confiar en enumerate
.
Esta es una variación del método grouper
del itertools module documentation.
- 1. iteración aleatoria en Python
- 2. Cuenta de iteración en python?
- 3. Orden de iteración de conjuntos en Python
- 4. Python iteración doble
- 5. jQuery e iteración en objetos JSON
- 6. iteración en un archivo usando Python
- 7. iteración doble en lista por comprensión
- 8. lector CSV de Python y la iteración
- 9. Python Última iteración en For Loop
- 10. python ahora, siguiente, n iteración
- 11. Cómo saber si estoy en la última iteración de un ciclo de X en Y en Objective-C
- 12. iteración en LaTeX
- 13. iteración paralela en C#?
- 14. iteración anidada en Scala
- 15. Python - Iteración sobre listas anidadas
- 16. JMeter - Disparar solicitudes diferentes en cada iteración
- 17. índice de iteración lenguaje
- 18. Creando una matriz en numpy/scipy por iteración en Python?
- 19. ¿Cómo sé en qué iteración estoy cuando uso el método Integer.times?
- 20. Identifique en qué iteración se encuentra en un bucle en python
- 21. Saltar sobre iteración en enumerables # recoger
- 22. Emacs qué modos estoy usando actualmente
- 23. Python: continuar la iteración de for loop en la excepción
- 24. Python, enorme problema de iteración de rendimiento
- 25. Iteración de elementos de diccionario(), values (), keys() en Python 3
- 26. iteración a través GroupCollection en C#
- 27. iteración de varias listas de Python
- 28. Continuar una iteración en C++ hasta un número de iteración específico en gdb
- 29. iteración a través de una matriz multidimensional en Python
- 30. Modificar un diccionario que estoy iteración a través de
Gracias, eso es maravilloso. – foo
Por cierto, ¿es un buen estilo poner un espacio entre la coma después de la i y la x? –
Sí, es un buen estilo pero un espacio entre el i y el x. –