循环内循环

时间:2017-03-19 15:01:54

标签: python for-loop

混淆下面的代码,如你所见,在另一个循环中有一个循环,我从stackoverflow检查了类似的答案,但仍然没有得到它......

grid = [
    ['.', '.', '.', '.', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['.', 'O', 'O', 'O', 'O', 'O'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]

for x in range(len(grid)):#0, 1, 2, 3, 4, 5, 6, 7, 8
    for y in range(len(grid[0])):#0, 1, 2, 3, 4, 5
        print(grid[x][y], end='')
    print('')

我期待输出如下:

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....

但实际上结果是:

......
.OO...
OOOO..
OOOOO.
.OOOOO
OOOOO.
OOOO..
.OO...
......

双循环的规定是什么?

4 个答案:

答案 0 :(得分:2)

你只需查看大列表中每个列表中的索引。 如果您希望输出符合您的要求,则需要更改

print(grid[x][y], end='')

print(grid[y][x], end='')

答案 1 :(得分:2)

您当前的循环首先选择列表中的第一个元素,这是一个仅包含点的列表,然后浏览并打印。您需要更改它,以便选择每个列表的第一个元素,然后选择每个列表中第二个位置的每个元素。

grid = [['.', '.', '.', '.', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['.', 'O', 'O', 'O', 'O', 'O'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]

for x in range(len(grid[0])):#0, 1, 2, 3, 4, 5, 6, 7, 8
    for y in range(len(grid)):#0, 1, 2, 3, 4, 5
        print(grid[y][x], end='')
    print('')
像这样。在print命令中交换了x和y,并对其进行了更改,以使for范围正确。对于双循环,它首先在第一个循环中选择x值,然后认为是一个具有y值和常量x值的循环。然后,它会选择下一个x值,并再次执行包含所有y值的循环。

输出:

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....

答案 2 :(得分:1)

它进入外部循环,然后进入内部循环。当它完成这个内循环时,它会回到外循环,再次进入内循环。这将重复,直到完成外循环。

所以基本上它只完成一次外循环,但是在外循环中完成内循环*迭代次数*次。

查看你的代码,通过循环内部循环得到grid [0] [y],其中y是内部循环变量,然后执行grid [1] [y],然后是grid [2 ] [y],依此类推......这样做x次。 xy这里是您的网格尺寸。

编辑:要让它显示您想要的方式,只需交换xy ...就像这样:grid [y] [x]

答案 3 :(得分:0)

只需翻转两个循环(y和x):

for x in range(len(grid)):#0, 1, 2, 3, 4, 5, 6, 7, 8
    for y in range(len(grid[0])):#0, 1, 2, 3, 4, 5
        print(grid[y][x], end='')
    print('')

如果你注意到,你的心 出现了,它只是旋转了90度。

我喜欢将rc变量用于这些类型的循环,其中r代表行,c代表列。使理解逻辑变得更容易。