实践要求:
   编写一个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()函数。
 其次打印时,一列的数据应该在一行上,我们需要当换行时候,打印也换行。
 从以上三个方面分析我们可以简单的写下面的代码。


点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. #获取数字列表中的最大数
  4. def maxlen(lenlist):
  5.     x=0
  6.     for i in lenlist:
  7.         if i > x:
  8.             x = i
  9.     return x
  10. #打印列表函数
  11. def printTable(table):
  12.     #转置列表
  13.     newtable=[]
  14.     #长度列表
  15.     lentable=[]
  16.     #最大字符串长度列表
  17.     maxrlen=[]
  18.     #列表初始化
  19.     for i in range(len(table[0])):
  20.         newtable.append([])
  21.     for i in range(len(table)):
  22.         lentable.append([])
  23.     #获取转置列表和长度列表
  24.     for i in range(len(table)):
  25.         for j in range(len(table[i])):
  26.             lentable[i].append(len(table[i][j]))
  27.             newtable[j].append(table[i][j])
  28.     #获取最大字符串长度列表
  29.     for i in lentable:
  30.         maxrlen.append(maxlen(i))
  31.     #打印列右对齐列表
  32.     for i in newtable:
  33.         for j in range(len(i)):
  34.             if j<(len(i)-1):
  35.                 print i[j].rjust(maxrlen[j]),
  36.             else:
  37.                 print i[j].rjust(maxrlen[j])
  38.     #返回转置列表
  39.     return newtable


  40. #主执行函数
  41. if __name__ == '__main__':
  42.     tableData = [['apple','orage','cherries','banana'],['alice','bob','carol','david'],['dogs','cats','moose','goose']]
  43.     maxrlen = printTable(tableData)



09-30 07:27
查看更多