如何打印格式化为网格的二维列表?
目前,我写了这段代码
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 提到的那样使用连接方法。