Printing Lists as Tabular Data

后端 未结 14 2069
小蘑菇
小蘑菇 2020-11-21 06:38

I am quite new to Python and I am now struggling with formatting my data nicely for printed output.

I have one list that is used for two headings, and a matrix that

相关标签:
14条回答
  • 2020-11-21 06:59

    I found this just looking for a way to output simple columns. If you just need no-fuss columns, then you can use this:

    print("Titlex\tTitley\tTitlez")
    for x, y, z in data:
        print(x, "\t", y, "\t", z)
    

    EDIT: I was trying to be as simple as possible, and thereby did some things manually instead of using the teams list. To generalize to the OP's actual question:

    #Column headers
    print("", end="\t")
    for team in teams_list:
        print(" ", team, end="")
    print()
    # rows
    for team, row in enumerate(data):
        teamlabel = teams_list[team]
        while len(teamlabel) < 9:
            teamlabel = " " + teamlabel
        print(teamlabel, end="\t")
        for entry in row:
            print(entry, end="\t")
        print()
    

    Ouputs:

              Man Utd  Man City  T Hotspur
      Man Utd       1       2       1   
     Man City       0       1       0   
    T Hotspur       2       4       2   
    

    But this no longer seems any more simple than the other answers, with perhaps the benefit that it doesn't require any more imports. But @campkeith's answer already met that and is more robust as it can handle a wider variety of label lengths.

    0 讨论(0)
  • 2020-11-21 07:03
    >>> import pandas
    >>> pandas.DataFrame(data, teams_list, teams_list)
               Man Utd  Man City  T Hotspur
    Man Utd    1        2         1        
    Man City   0        1         0        
    T Hotspur  2        4         2        
    
    0 讨论(0)
  • 2020-11-21 07:03

    I would try to loop through the list and use a CSV formatter to represent the data you want.

    You can specify tabs, commas, or any other char as the delimiter.

    Otherwise, just loop through the list and print "\t" after each element

    http://docs.python.org/library/csv.html

    0 讨论(0)
  • 2020-11-21 07:08

    Pure Python 3

    def print_table(data, cols, wide):
        '''Prints formatted data on columns of given width.'''
        n, r = divmod(len(data), cols)
        pat = '{{:{}}}'.format(wide)
        line = '\n'.join(pat * cols for _ in range(n))
        last_line = pat * r
        print(line.format(*data))
        print(last_line.format(*data[n*cols:]))
    
    data = [str(i) for i in range(27)]
    print_table(data, 6, 12)
    

    Will print

    0           1           2           3           4           5           
    6           7           8           9           10          11          
    12          13          14          15          16          17          
    18          19          20          21          22          23          
    24          25          26
    
    0 讨论(0)
  • 2020-11-21 07:09

    To create a simple table using terminaltables

    Open the terminal or your command prompt and run pip install terminaltables You can print and python list as the following

    from terminaltables import AsciiTable
    
    l = [
      ['Head', 'Head'],
      ['R1 C1', 'R1 C2'],
      ['R2 C1', 'R2 C2'],
      ['R3 C1', 'R3 C2']
    ]
    
    table = AsciiTable(l)
    
    print(table.table)
    

    They have other cool tables don't forget to check them out. Just google their library.

    Hope that helps :100:!

    0 讨论(0)
  • 2020-11-21 07:10

    A simple way to do this is to loop over all columns, measure their width, create a row_template for that max width, and then print the rows. It's not exactly what you are looking for, because in this case, you first have to put your headings inside the table, but I'm thinking it might be useful to someone else.

    table = [
        ["", "Man Utd", "Man City", "T Hotspur"],
        ["Man Utd", 1, 0, 0],
        ["Man City", 1, 1, 0],
        ["T Hotspur", 0, 1, 2],
    ]
    def print_table(table):
        longest_cols = [
            (max([len(str(row[i])) for row in table]) + 3)
            for i in range(len(table[0]))
        ]
        row_format = "".join(["{:>" + str(longest_col) + "}" for longest_col in longest_cols])
        for row in table:
            print(row_format.format(*row))
    

    You use it like this:

    >>> print_table(table)
    
                Man Utd   Man City   T Hotspur
      Man Utd         1          0           0
     Man City         1          1           0
    T Hotspur         0          1           2
    
    0 讨论(0)
提交回复
热议问题