houbysoft - 2 years ago 104
Python Question

# Pretty print 2D Python list

Is there a simple, built-in way to print a 2D Python list as a 2D matrix?

So this:

``````[["A", "B"], ["C", "D"]]
``````

would become something like

``````A    B
C    D
``````

I found the pprint module, but it doesn't seem to do what I want.

To make things interesting, let's try with a bigger matrix:

``````matrix = [
["Ah!",  "We do have some Camembert", "sir"],
["It's a bit", "runny", "sir"],
["Well,",  "as a matter of fact it's", "very runny, sir"],
["I think it's runnier",  "than you",  "like it, sir"]
]

s = [[str(e) for e in row] for row in matrix]
lens = [max(map(len, col)) for col in zip(*s)]
fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
table = [fmt.format(*row) for row in s]
print '\n'.join(table)
``````

Output:

``````Ah!                     We do have some Camembert   sir
It's a bit              runny                       sir
Well,                   as a matter of fact it's    very runny, sir
I think it's runnier    than you                    like it, sir
``````

UPD: for multiline cells, something like this should work:

``````text = [
["Ah!",  "We do have\nsome Camembert", "sir"],
["It's a bit", "runny", "sir"],
["Well,",  "as a matter\nof fact it's", "very runny,\nsir"],
["I think it's\nrunnier",  "than you",  "like it,\nsir"]
]

from itertools import chain, izip_longest

matrix = chain.from_iterable(
izip_longest(
*(x.splitlines() for x in y),
fillvalue='')
for y in text)
``````

And then apply the above code.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download