python - studio - recorrer dataframe r
Iterar un cierto número de veces sin almacenar el número de iteración en cualquier lugar (10)
Esta pregunta ya tiene una respuesta aquí:
Me preguntaba si es posible realizar una cierta cantidad de operaciones sin almacenar el número de iteración de bucle en ningún lado.
Por ejemplo, digamos que quiero imprimir dos mensajes de "hello"
en la consola. En este momento sé que puedo hacer:
for i in range(2):
print "hello"
pero entonces la variable i
va a tomar los valores 0
y 1
(que realmente no necesito). ¿Hay alguna forma de lograr lo mismo sin almacenar esos valores no deseados en ninguna parte?
Aunque estoy totalmente de acuerdo con la respuesta de delnan, no es imposible:
loop = range(NUM_ITERATIONS+1)
while loop.pop():
do_stuff()
Sin embargo, tenga en cuenta que esto no funcionará para una lista arbitraria: si el primer valor de la lista (el último reventado) no se evalúa como False
, obtendrá otra iteración y una excepción en la siguiente pasada: IndexError: pop from empty list
Además, su lista ( loop
) estará vacía después del bucle.
Solo por curiosidad. ;)
Bueno, creo que el forloop que ha proporcionado en la pregunta es tan bueno como puede ser, pero quiero señalar que las variables no utilizadas que tienen que asignarse se pueden asignar a la variable llamada _
, una convención para "descartar" el valor asignado. Aunque la referencia mantendrá el valor que le asignó, los programas de código y otros desarrolladores comprenderán que no está utilizando esa referencia. Así que aquí hay un ejemplo:
for _ in range(2):
print(''Hello'')
Esto imprimirá ''hola'' 3 veces sin almacenar i
...
[print(''hello'') for i in range(3)]
La expresión idiomática (compartida por muchos otros idiomas) para una variable no utilizada es un subrayado único _
. Los analizadores de código normalmente no se quejan de que no se usen, y los programadores sabrán instantáneamente que es un atajo para i_dont_care_wtf_you_put_here
. No hay forma de iterar sin tener una variable de elemento, como dice el Zen de Python, "los casos especiales no son lo suficientemente especiales como para romper las reglas".
Lo sentimos, pero para poder iterar sobre cualquier cosa en cualquier idioma, incluido Python e inglés, se debe almacenar un índice. Ya sea en una variable o no. Encontrar una forma de ocultar el hecho de que python está rastreando internamente el bucle for no cambiará el hecho de que sí lo está. Yo recomendaría simplemente dejarlo como está.
Otros han abordado la incapacidad de evitar por completo una variable de iteración en un bucle for
, pero hay opciones para reducir el trabajo en una pequeña cantidad. range
tiene que generar un montón de números después de todo, lo que implica una pequeña cantidad de trabajo; si desea evitar incluso eso, puede usar itertools.repeat
para obtener el mismo valor (ignorado) una y otra vez, lo que no implica la creación / recuperación de diferentes objetos:
from itertools import repeat
for _ in repeat(None, 200): # Runs the loop 200 times
...
Esto se ejecutará más rápido en Microbenchmarks que for _ in range(200):
pero si el cuerpo del bucle realiza un trabajo significativo, es una gota en el cubo. Y a diferencia de la multiplicación de una secuencia anónima para su bucle iterable, la repeat
solo tiene un costo de configuración trivial, sin que la sobrecarga de memoria dependa de la duración.
Puedes simplemente hacer
imprimir 2 * ''hola''
Resulta que usar dummy * (la palabra inicial es ficticia) como una variable hace el mismo truco que _. Pero no te metas con una variable ya definida o algunas veces utilizada o una función.
exec ''print "hello";'' * 2
debería funcionar, pero estoy algo avergonzado de haberlo pensado.
Actualización: solo pensé en otra:
for _ in " "*10: print "hello"
for word in [''hello''] * 2:
print word
No es Idiomático Python, pero tampoco es lo que estás tratando de hacer.