为什么我不能在列表列表中使用嵌套循环?

Why I am not able to use a nested loop in a list of lists?

我正在尝试解决书 Automate the boring stuff with Python 第 4 章 Project:Character picture grid 中的项目。

我无法遍历代码并打印书中所说的模式。这是我的代码:

gridlines = [['.', '.', '.', '.', '.', '.'],  # 0, 0
             ['.', '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', '.', '.', '.'],
             ['.', '.', '.', '.', '.', '.']]

def grid_line(grid_func):
    for i in grid_func[0:8]:
        for grid_functioning in grid_func[0:5]:
                print(i, end='')

grid_line(gridlines)

书上说要打印这个图案:

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

该模式似乎从左上角开始,最初 向下 而不是跨越 (a)。这意味着您不能处理一行中的每一列,而必须处理一列中的每一行。

假设,它保证是矩形的,可以用(b):

来完成
def grid_line(grid_func):
    for index in range(len(grid_func[0])): # square: do each column
        for row in grid_func:              # do each row within that column
            print(row[index], end="")      # output the cell, no line feed
        print()                            # go to next line after column

您会注意到我删除了 [0:n] 位,因为您不需要切片,应该使用整个 row/column。在任何情况下,你的 58 值都是错误的,因为 n 是一个 beyond 你想要处理的东西,所以你会跳过最后的 row/column.


(a) 从技术上讲,它 可以 从左下角开始向上(因为它是对称的)但我选择了更简单的情况。


(b) 它可以 可以用下面更 Pythonic 的列表理解和字符串连接方法来完成,但我可能会等到你对这门语言更熟悉了再说:-)

def grid_line(grid):
    print("\n".join(["".join([row[idx] for row in grid]) for idx in range(len(grid[0]))]))