编写一个printTable函数,输入值为一个table,假设内嵌的列表都含有相同的数目,输入实例如下:
tableData = [['apple','orage','cherries','banana'],['alice','bob','carol','david'],['dogs','cats','moose','goose']]
输出要求:每列右对齐(可以参考rjust())
输出:
apple alice dogs
orage bob cats
cherries carol moose
banana david goose
编写分析:
首先需要打印的出来的结果和输入的列表是一个转置的关系,因此我们可以先造一个转置的列表newtable。
再次由于输出需要右对齐,rjust()需要传输一个字符串的对齐长度,因此我们需要获取输出的每列的最大字符串长度给rjust()函数。
其次打印时,一列的数据应该在一行上,我们需要当换行时候,打印也换行。
从以上三个方面分析我们可以简单的写下面的代码。
点击(此处)折叠或打开
- #!/usr/bin/env python
- #coding:utf-8
- #获取数字列表中的最大数
- def maxlen(lenlist):
- x=0
- for i in lenlist:
- if i > x:
- x = i
- return x
- #打印列表函数
- def printTable(table):
- #转置列表
- newtable=[]
- #长度列表
- lentable=[]
- #最大字符串长度列表
- maxrlen=[]
- #列表初始化
- for i in range(len(table[0])):
- newtable.append([])
- for i in range(len(table)):
- lentable.append([])
- #获取转置列表和长度列表
- for i in range(len(table)):
- for j in range(len(table[i])):
- lentable[i].append(len(table[i][j]))
- newtable[j].append(table[i][j])
- #获取最大字符串长度列表
- for i in lentable:
- maxrlen.append(maxlen(i))
- #打印列右对齐列表
- for i in newtable:
- for j in range(len(i)):
- if j<(len(i)-1):
- print i[j].rjust(maxrlen[j]),
- else:
- print i[j].rjust(maxrlen[j])
- #返回转置列表
- return newtable
- #主执行函数
- if __name__ == '__main__':
- tableData = [['apple','orage','cherries','banana'],['alice','bob','carol','david'],['dogs','cats','moose','goose']]
- maxrlen = printTable(tableData)