嵌套 for 循环如何工作?

How do nested for loops work?

这是我写的代码,工作得很好:

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

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

输出如下:

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

等等

有趣的是:我得到了我想要的,但是我真的不明白其中的逻辑。对于我编写的代码,我希望得到以下输出:

1 1
2 2
3 3
4 4 
5 5 

为什么?因为根据我的想法,我陈述了以下内容:

对于框中的每个值 i(左栏)和每个值 x(右栏)打印两者。

事实上,我认为代码应该充当:

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

我的问题是,为什么函数中嵌套的 for 循环的行为与我预期的不同?

它怎么知道要创建 number * number 行? 它是如何对数字进行排序的,那里实际上发生了什么关系?

你的循环中有一个循环,因此对于外循环的每次迭代,这个内循环将完整 运行。因此,对于 i 的每个数字,您都需要遍历 x 的整个循环。

这是逻辑。 for i in boxi 将开始成为 1 并向前移动直到成为 5(列表中的所有元素)。所以如果你在这个循环中打印 i,你会看到 i 首先是 1,然后 i2 ... 直到 i5(框中的最后一个元素)。 但是,如果您嵌套另一个 for 循环,每次 i 是列表中的不同元素时,它都会执行相同的操作(从 1 开始并向前移动直到 5)。因此,当 i1 时,在更改为另一个不同的 i 之前,它将开始第二个循环(for x in box),因此当 i 为 [=13] 时=] x 会变成 x == 1, x == 2... x == 5 .当这个嵌套循环结束时,然后 i 更改为列表中的另一个元素,所以现在 i 将是 2,并且嵌套循环再次开始,所以 x == 1, x == 2..., x == 5.

我想如果你试试这个,你可能会明白它是如何工作的

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 1
2 2
3 3
4 4
5 5

然后这样做:


for i in box:
    print(i,i)


如果你这样做:


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

然后外循环执行一次后,再执行内循环,直到内循环完成。也就是说1个外循环,内循环会执行5次
逻辑是这样的:

  • 我将检索框数组的第一个元素的值
  • x 将检索框 arrray
  • 的第一个元素的值
  • 然后会打印1 1
  • x 将检索框数组的第二个元素的值
  • 然后会打印1 2
  • x 将检索框数组的第三个元素的值
  • 然后打印1 3。依此类推,直到打印出 1 5
  • 我将检索框数组的第二个元素的值
  • x 将检索框 arrray
  • 的第一个元素的值
  • 然后会打印2 1
  • x 将检索框数组的第二个元素的值
  • 然后会打印2 2 等等

这个:

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

与此相同:

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)