I'm new to Python and I came to the following excercise:
Write a function named printTable() that takes a list of lists of strings and displays it in a well-organized table with each column right-justified. Assume that all the inner lists will contain the same number of strings. For example, the value could look like this:
tableData = [['apples', 'oranges', 'cherries', 'banana'], ['Alice', 'Bob', 'Carol', 'David'], ['dogs', 'cats', 'moose', 'goose']]
Your printTable() function would print the following:
apples Alice dogs oranges Bob cats cherries Carol moose banana David goose
My solution is this:
table_printer.py
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
def printTable(tableData):
"""
Print table neatly formatted:
e.g:
[['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
becomes:
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
"""
# make list of ints to store later max len element of each list
colWidths = [0] * len(tableData)
# Store maxlen of each list
i = 0
while i < len(tableData):
colWidths[i] = len(max(tableData[i], key=len))
i = i + 1
# Print formatted
for x in range(len(tableData[0])):
for y in range(len(colWidths)):
print(tableData[y][x].rjust(colWidths[y]), end=' ')
print(end='\n')
printTable(tableData)
I wonder if this is a good solution or if there is an easier/better way. It took me quite some time to come up with a solution. Still I feel its probaly not very elegant. Maybe I'm overcomplicating it because I came from C/C++ where you oftenly have to do stuff by hand.
I read that it's often not a good idea in python to write loops like in other languages with explicit indices (what I basically did here). Are there any alternatives?
np.array([np.array(max([len(xii) for xii in xi])) for xi in tableData])
which returns[8 5 5]
. These numbers will be used to format the strings. \$\endgroup\$