一个获得最大长度的衬里:
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
or 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
and zip
)的情况下尝试解决问题是一个好主意 - 除非有人试图教您关于它们的有用性或如何编写循环的课程。但是,你可能不应该在这里问......