You can compute the column widths and then generate a template for the format() method:
cells = [
[ 1, 5, 3, 1],
[ 10, 23, 3, 23 ],
[ 1, 122, 3, 233]
]
scells = [[str(x) for x in line] for line in cells]
columns = zip(*scells)
padding = 2
width = [ max(len(s) for s in col) for col in columns ]
template = ''.join(["{{{0}:>{1}d}}".format(i, w+padding) for i, w in enumerate(width)])
print "cells:", cells
print "scells:", scells
print "columns:", columns
print "width:", width
print "template:", template
for line in cells:
print template.format(*line)
""" my output -->
cells: [[1, 5, 3, 1], [10, 23, 3, 23], [1, 122, 3, 233]]
scells: [['1', '5', '3', '1'], ['10', '23', '3', '23'], ['1', '122', '3', '233']]
columns: [('1', '10', '1'), ('5', '23', '122'), ('3', '3', '3'), ('1', '23', '233')]
width: [2, 3, 1, 3]
template: {0:>4d}{1:>5d}{2:>3d}{3:>5d}
1 5 3 1
10 23 3 23
1 122 3 233
"""