Python: how to print out a 2d list that is formatted into a grid?

前端 未结 3 1932
醉酒成梦
醉酒成梦 2021-01-14 10:11

Currently, I have made this code

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

>         


        
相关标签:
3条回答
  • 2021-01-14 10:36

    If you want to "pretty" print your grid with each sublist on its own line, you can use pprint:

    >>> grid=[[['o'], ['-'], ['-'], ['-'], ['-']], [['-'], ['-'], ['-'], ['-'], ['-']], [['-'], ['-'], ['-'], ['-'], ['-']]]
    
    >>> from pprint import pprint
    >>> pprint(grid)
    
    [[['o'], ['-'], ['-'], ['-'], ['-']],
     [['-'], ['-'], ['-'], ['-'], ['-']],
     [['-'], ['-'], ['-'], ['-'], ['-']]]
    

    It will still show each element as a list, as you defined it, if you want to show them as strings you'll have to use joins like m.wasowski suggests.

    0 讨论(0)
  • 2021-01-14 10:50

    Use string join()

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

    or as one-liner:

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

    but if would rather recommend you to change everything into:

    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))
    
    0 讨论(0)
  • 2021-01-14 10:55

    If you want to use the result of grid_maker(), you have to return its result, using return:

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

    I modified it, because I don't think that each element must be inside another list.

    To print the "grid", you could iterate through each row and then iterate through each element:

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

    Output:

    print_grid(grid_maker(3, 5))
    
    o - - - -
    - - - - -
    - - - - -
    
    0 讨论(0)
提交回复
热议问题