Table Printer Excercise
up vote
2
down vote
favorite
im new two 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 there is a easier/better way. It took me quite some time to come up with a solution. Still i feel its probaly not very elegant.
Maybe im thinking to difficult because i come from c/c++ were you often have to do more stuff by hand.
I read is 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 here?
python strings formatting
add a comment |
up vote
2
down vote
favorite
im new two 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 there is a easier/better way. It took me quite some time to come up with a solution. Still i feel its probaly not very elegant.
Maybe im thinking to difficult because i come from c/c++ were you often have to do more stuff by hand.
I read is 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 here?
python strings formatting
You can compute the maximal length on each row bynp.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.
– Sigur
3 hours ago
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
im new two 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 there is a easier/better way. It took me quite some time to come up with a solution. Still i feel its probaly not very elegant.
Maybe im thinking to difficult because i come from c/c++ were you often have to do more stuff by hand.
I read is 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 here?
python strings formatting
im new two 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 there is a easier/better way. It took me quite some time to come up with a solution. Still i feel its probaly not very elegant.
Maybe im thinking to difficult because i come from c/c++ were you often have to do more stuff by hand.
I read is 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 here?
python strings formatting
python strings formatting
asked 9 hours ago
Sandro4912
681121
681121
You can compute the maximal length on each row bynp.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.
– Sigur
3 hours ago
add a comment |
You can compute the maximal length on each row bynp.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.
– Sigur
3 hours ago
You can compute the maximal length on each row by
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.– Sigur
3 hours ago
You can compute the maximal length on each row by
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.– Sigur
3 hours ago
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
Here is my proposal.
import numpy as np
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
max_len = np.array([np.array(max([len(xii) for xii in xi])) for xi in tableData])
for col in range(len(tableData[0])):
for i in range(len(tableData)):
print ("{:>%d}" % max_len[i]).format(tableData[i][col]),
print ""
Output
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Here is my proposal.
import numpy as np
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
max_len = np.array([np.array(max([len(xii) for xii in xi])) for xi in tableData])
for col in range(len(tableData[0])):
for i in range(len(tableData)):
print ("{:>%d}" % max_len[i]).format(tableData[i][col]),
print ""
Output
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
add a comment |
up vote
0
down vote
Here is my proposal.
import numpy as np
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
max_len = np.array([np.array(max([len(xii) for xii in xi])) for xi in tableData])
for col in range(len(tableData[0])):
for i in range(len(tableData)):
print ("{:>%d}" % max_len[i]).format(tableData[i][col]),
print ""
Output
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
add a comment |
up vote
0
down vote
up vote
0
down vote
Here is my proposal.
import numpy as np
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
max_len = np.array([np.array(max([len(xii) for xii in xi])) for xi in tableData])
for col in range(len(tableData[0])):
for i in range(len(tableData)):
print ("{:>%d}" % max_len[i]).format(tableData[i][col]),
print ""
Output
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
Here is my proposal.
import numpy as np
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
max_len = np.array([np.array(max([len(xii) for xii in xi])) for xi in tableData])
for col in range(len(tableData[0])):
for i in range(len(tableData)):
print ("{:>%d}" % max_len[i]).format(tableData[i][col]),
print ""
Output
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
answered 3 hours ago
Sigur
1689
1689
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f208246%2ftable-printer-excercise%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You can compute the maximal length on each row by
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.– Sigur
3 hours ago