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.
Advertisement
Answer
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 havensome Camembert", "sir"], ["It's a bit", "runny", "sir"], ["Well,", "as a matternof fact it's", "very runny,nsir"], ["I think it'snrunnier", "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.