Este es el código que escribí, funciona perfectamente bien:

box = [1, 2, 3, 4, 5]

for i in box:
    for x in box:
        print (i,x)

Produce lo siguiente:

1 1
1 2
1 3
1 4
1 5
2 1
2 2

Etcetera.

La parte divertida es: obtuve exactamente lo que quiero, sin embargo, realmente no entiendo la lógica. Para el código que escribí, esperaría el siguiente resultado:

1 1
2 2
3 3
4 4 
5 5 

¿Por qué? Porque por mi idea dije lo siguiente:

Para cada valor i (columna izquierda) en el cuadro y para cada valor x (columna derecha) imprima ambos.

De hecho, el código que creo debería actuar como:

for i,y in zip(box,box):
    print(i,y)

Mi pregunta es, ¿por qué el bucle for anidado en la función se comportó de manera diferente de lo que esperaba?

¿Cómo supo crear filas number * number? ¿Cómo ordenó los números como lo ha hecho, qué relación ocurrió allí agudamente?

0
michigansqllite123 10 may. 2016 a las 13:14

4 respuestas

La mejor respuesta

Es lógica. for i in box, i comenzarán a ser 1 y avanzarán hasta ser 5 (todos los elementos de la lista). Entonces, si imprime i dentro de este bucle, verá que i es primero 1, luego i es 2 ... hasta {{X9} } es 5 (último elemento del cuadro). Pero si anida otro bucle for, hará lo mismo (comenzar desde 1 y avanzar hasta 5) cada vez que i sea un elemento diferente de la lista. Entonces, cuando i es 1, antes de cambiar a otro i diferente, comenzará el segundo ciclo (for x in box), entonces cuando i sea {{X17 }} x cambiará siendo x == 1, x == 2 ... x == 5 . Cuando finaliza este bucle anidado, i cambia a otro elemento de la lista, por lo que ahora i sería 2, y el bucle anidado comienza de nuevo, por lo que x == 1, x == 2 ..., x == 5.

Creo que podrías entender cómo funciona si intentas esto

box = [1, 2, 3, 4, 5]


for i in box: #it will go through all elements in the list
    print i, "this is the first loop" #for each different 'i' in box
    for x in box: #it will go through all elements in the list
        print x, "this is the second loop" #you will get all elements from the box
        print (i,x) #this is what you get
1
Dovi 10 may. 2016 a las 10:46

Éste:

box = [1, 2, 3, 4, 5]
for i in box:
    for x in box:
        print (i,x)

Es la misma que esta:

i = 1
for x in box:
    print (i,x)
i = 2
for x in box:
    print (i,x)
i = 3
for x in box:
    print (i,x)
i = 4
for x in box:
    print (i,x)
i = 5
for x in box:
    print (i,x)
0
Bryan Oakley 10 may. 2016 a las 11:35

Si esto es lo que quieres


1 1
2 2
3 3
4 4
5 5

Entonces haz esto:


for i in box:
    print(i,i)


Si hace esto:


for i in box:
    for x in box:
        print (i,x)

Luego, una vez ejecutado el bucle externo una vez, ejecutará el bucle interno hasta que el bucle interno esté COMPLETO. Eso significa que para 1 bucle externo, el bucle interno se ejecutará 5 veces.
La lógica es así:

  • recuperaré el valor del primer elemento de la matriz de caja
  • x recuperará el valor del primer elemento de la matriz de caja
  • Entonces se imprimirá 1 1
  • x recuperará el valor del segundo elemento de la matriz de caja
  • Entonces se imprimirá 1 2
  • x recuperará el valor del tercer elemento de la matriz de caja
  • Entonces se imprimirá 1 3. Y así sucesivamente hasta que se imprima 1 5
  • recuperaré el valor del segundo elemento de la matriz de caja
  • x recuperará el valor del primer elemento de la matriz de caja
  • Luego se imprimirá 2 1
  • x recuperará el valor del segundo elemento de la matriz de caja
  • Luego se imprimirá 2 2 y así sucesivamente
-1
Handy 10 may. 2016 a las 11:31

Tiene un bucle dentro de su bucle, por lo que este bucle interno se ejecutará en su totalidad para cada iteración del bucle externo. Entonces, para cada número de i, debe recorrer todo el ciclo para x.

0
dahui 10 may. 2016 a las 10:26