如何打印格式化为网格的二维列表?

4 投票
3 回答
42232 浏览
提问于 2025-04-17 23:28

目前,我写了这段代码

def grid_maker(h,w):
    grid = [[["-"] for i in range(w)] for i in range(h)]
    grid[0][0] = ["o"]
    print grid

>>>grid_maker(3,5) => [[['o'], ['-'], ['-'], ['-'], ['-']], [['-'], ['-'], ['-'], ['-'], ['-']], [['-'], ['-'], ['-'], ['-'], ['-']]] 

我想再写一个函数,这个函数可以接收生成的二维数组,并把它打印出来,格式要像这样:

o----
-----
----- 

不过,我不知道从哪里开始。

3 个回答

1

使用字符串的 join() 方法

for row in grid:
    print ''.join(*zip(*row))

或者可以用一行代码来写:

print '\n'.join(''.join(*zip(*row)) for row in grid)

不过我更建议你把所有内容改成:

def grid_maker(h,w):
    grid = [["-" for _ in range(w)] for _ in range(h)]
    grid[0][0] = "o"
    return grid

print '\n'.join(''.join(row) for row in grid_maker(5,5))
5

如果你想使用grid_maker()的结果,你需要用return把结果返回。

def grid_maker(h, w):
    grid = [["-" for i in range(w)] for i in range(h)]
    grid[0][0] = "o"
    return grid

我做了一些修改,因为我觉得每个元素不一定要放在另一个list里面。

要打印出“网格”,你可以先遍历每一,然后再遍历每个元素:

def print_grid(grid):
    for row in grid:
        for e in row:
            print e,
        print

输出:

print_grid(grid_maker(3, 5))

o - - - -
- - - - -
- - - - -
6

如果你想把你的网格打印得更好看,每个子列表单独占一行,可以使用 pprint 这个工具:

>>> grid=[[['o'], ['-'], ['-'], ['-'], ['-']], [['-'], ['-'], ['-'], ['-'], ['-']], [['-'], ['-'], ['-'], ['-'], ['-']]]

>>> from pprint import pprint
>>> pprint(grid)

[[['o'], ['-'], ['-'], ['-'], ['-']],
 [['-'], ['-'], ['-'], ['-'], ['-']],
 [['-'], ['-'], ['-'], ['-'], ['-']]]

不过,它仍然会把每个元素显示成列表的样子,正如你定义的那样。如果你想把它们显示成字符串,就需要像 m.wasowski 提到的那样使用连接方法。

撰写回答