How to print a nested python list in columns

帅比萌擦擦* 提交于 2021-02-04 15:53:45

问题


I have a program that produces a python list as its output the list is a nested list: A list of the list [name, address, phone number] which I wish to be able to print in a columnar format. It seems upon stating the question to be a very simple Idea, but I have been unable to find a simple way to extract the data from the list. If I print(list), I get something like this: ['name','address','phone number'], etc. for each item in the list. I'm using Python 3 on a windows platform. Note: I am not a OOP programmer(at this point)

Regards Bill


回答1:


Iterate over the list like this:

for name,add,num in lis:
   print (name,add,num)

Demo:

>>> lis = [['name','address','phone number']]
>>> for name,add,num in lis:
...        print (name,add,num)
...     
name address phone number

You can also use string formatting for a better looking output:

>>> lis = [['name','address','phone number']]
>>> for name,add,num in lis:
       print ("{:<10}{:^20}{:^10}".format(name,add,num))
...     
name            address        phone number



回答2:


prettytable can produce very nice looking ASCII tables. Example from the tutorial:

from prettytable import PrettyTable

x = PrettyTable(["City name", "Area", "Population", "Annual Rainfall"])
x.align["City name"] = "l" # Left align city names
x.add_row(["Adelaide",1295, 1158259, 600.5])
x.add_row(["Brisbane",5905, 1857594, 1146.4])
x.add_row(["Darwin", 112, 120900, 1714.7])
x.add_row(["Hobart", 1357, 205556, 619.5])
x.add_row(["Sydney", 2058, 4336374, 1214.8])
x.add_row(["Melbourne", 1566, 3806092, 646.9])
x.add_row(["Perth", 5386, 1554769, 869.4])
print x

Should print something like this

+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Adelaide  | 1295 |  1158259   |      600.5      |
| Brisbane  | 5905 |  1857594   |      1146.4     |
| Darwin    | 112  |   120900   |      1714.7     |
| Hobart    | 1357 |   205556   |      619.5      |
| Sydney    | 2058 |  4336374   |      1214.8     |
| Melbourne | 1566 |  3806092   |      646.9      |
| Perth     | 5386 |  1554769   |      869.4      |
+-----------+------+------------+-----------------+

Adapting this example for your use-case should be trivial.




回答3:


for name, address, phone_number in a_list:
    print '{}\t{}\t{}'.format(name, address, phone_number)



回答4:


You can use the print statement, for instance if you want all you fields to be 20 characters wide:

for e in list:
    name, address, phone = e
    print "%20s %20s %20s" % (name, address, phone)



回答5:


The other answers given will truncate your records if they go over the field size. If you want them to wrap instead, you need to use the textwrap module.

import textwrap
import itertools

col_width = 20

header = ["Name", "Address", "Phone Number"]

def columnar_record(record):
    columns = (textwrap.wrap(item, col_width) for item in record)
    line_tuples = itertools.zip_longest(*columns, fillvalue="")
    lines = ("".join(item.ljust(col_width) for item in line_tuple)
             for line_tuple in line_tuples)
    return "\n".join(lines)

def print_columns(records):
    print(columnar_record(header))
    for record in records:
        print(columnar_record(record))

a = ["Bill Bradley", "123 North Main St., Anytown, NY 12345", "800-867-5309"]
b = ["John Doe", "800 South Main Street, Othertown, CA 95112", "510-555-5555"]

print_columns([a, b])


来源:https://stackoverflow.com/questions/17514935/how-to-print-a-nested-python-list-in-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!