题目:
编写一个名为 printTable()的函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐。假定所有内层列表都包含同样数目的字符串。例如,该值可能看起来像这样:
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
你的 printTable()函数将打印出:
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
个人思路:看打印可以看出第1列是右对齐,第2、3列是左对齐,且每一列都是内嵌列表的,但是我们打印一行是不同列表同位置的元素。因此我们可以先获取每个内嵌列表中元素的最大长度。再对每一行中进行不同的格式化。
首先获取每个列表最大的长度。用来当rjust和ljust的参数。
def printTable(L):
colWidth = []
for i in range(len(L)):
colWidth.append(max(len(j) for j in L[i])) # 这里获取每个内置列表的最大字符串长度
然后分别处理要打印的第一、第二、第三个元素。
for i in range(len(L[0])):
for j in range(len(L)): # 这里根据输出要求进行调整,第一行输出apples、Alice、dogs,在输出的时候再调用rjust,他们的缩进都不一样所以得使用if语句判定
if j == 0: # 第一个列表中最大长度度,且不换行
s = L[j][i].rjust(colWidth[j])
print(s, end=' ')
elif j == 1: # 第二个,不换行
s = L[j][i].ljust(colWidth[j])
print(s, end=' ')
else:
s = L[j][i].ljust(colWidth[j])
print(s, ) # 第三个,且换行
完整代码如下:
def printTable(L):
colWidth = []
for i in range(len(L)):
colWidth.append(max(len(j) for j in L[i])) # 这里获取每个内置列表的最大字符串长度
for i in range(len(L[0])):
for j in range(len(L)): # 这里根据输出要求进行调整,第一行输出apples、Alice、dogs,在输出的时候再调用rjust,他们的缩进都不一样所以得使用if语句判定
if j == 0:
s = L[j][i].rjust(colWidth[j])
print(s, end=' ')
elif j == 1:
s = L[j][i].ljust(colWidth[j])
print(s, end=' ')
else:
s = L[j][i].ljust(colWidth[j])
print(s, )
if __name__ == '__main__':
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
printTable(tableData)
结果:
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
如有错误,欢迎指出。如果有疑问,我会在评论区回答。