嵌套 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 box
、i
将开始成为 1
并向前移动直到成为 5
(列表中的所有元素)。所以如果你在这个循环中打印 i
,你会看到 i
首先是 1
,然后 i
是 2
... 直到 i
是 5
(框中的最后一个元素)。
但是,如果您嵌套另一个 for 循环,每次 i
是列表中的不同元素时,它都会执行相同的操作(从 1 开始并向前移动直到 5)。因此,当 i
为 1
时,在更改为另一个不同的 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)
这是我写的代码,工作得很好:
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 box
、i
将开始成为 1
并向前移动直到成为 5
(列表中的所有元素)。所以如果你在这个循环中打印 i
,你会看到 i
首先是 1
,然后 i
是 2
... 直到 i
是 5
(框中的最后一个元素)。
但是,如果您嵌套另一个 for 循环,每次 i
是列表中的不同元素时,它都会执行相同的操作(从 1 开始并向前移动直到 5)。因此,当 i
为 1
时,在更改为另一个不同的 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)