Один вкладыш, чтобы получить максимальную длину:
max_len = max(map(max, [map(len, l) for l in tableData]))
Но если вам как-то запрещено использовать map
, это еще проще:
max_len = 0
for l in tableData:
for s in l:
max_len = max(max_len, len(s))
И чтобы напечатать таблицу, главная проблема заключается в том, что таблицу нужно сначала транспонировать:
printTableData = list(map(list, zip(*tableData)))
Опять же, без map
или zip
, это больше работы:
max_col_len = 0
for l in tableData:
max_col_len = max(max_col_len, len(l))
printTableData2 = [[] for _ in range(max_col_len)]
for i in range(max_col_len):
for j in range(len(tableData)):
if i <= len(tableData[j]):
printTableData2[i].append(tableData[j][i])
else:
printTableData2[i].append('')
И напечатать все это:
for l in printTableData:
for s in l:
sys.stdout.write(s.rjust(max_len+1))
sys.stdout.write('\n')
Обратите внимание, что это не совсем то, что вам нужно, поскольку на предоставленном вами изображении каждый столбец настраивается отдельно. Итак, как полное решение:
import sys
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
max_lens = []
max_col_len = 0
for l in tableData:
max_col_len = max(max_col_len, len(l))
max_len = 0
for s in l:
max_len = max(max_len, len(s))
max_lens.append(max_len)
printTableData = [[] for _ in range(max_col_len)]
for i in range(max_col_len):
for j in range(len(tableData)):
if i <= len(tableData[j]):
printTableData[i].append(tableData[j][i])
else:
printTableData[i].append('')
for l in printTableData:
for i in range(len(l)):
sys.stdout.write(l[i].rjust(max_lens[i]+1))
sys.stdout.write('\n')
Я не уверен, что пытаться решать проблемы без использования того, что предоставляет вам язык (например, map
и zip
), это хорошая идея - если кто-то не пытается преподать вам урок об их полезности или о том, как написать петли. Но тогда вы, вероятно, не должны спрашивать здесь ...