打印列表清单。从列表[x] [y]转到列表[y] [x]

时间:2016-04-02 02:44:56

标签: python list

我正在学习python并且遇到了以下练习题。我正在尝试采用以下列表并将其打印在右对齐表中。

tableData= [['apples', 'oranges', 'cherries' , 'banana'],
            ['Alice' , 'Bob' , 'Carol', 'David'],
            ['dogs' , 'cats' , 'moose', 'goose']]

输出应该是这样的。

  apples Alice  dogs
 oranges   Bob  cats
cherries Carol moose
  banana David goose

这是我的代码。

tableData= [['apples', 'oranges', 'cherries' , 'banana'],
            ['Alice' , 'Bob' , 'Carol', 'David'],
            ['dogs' , 'cats' , 'moose', 'goose']]

def printTable(lists):
    colWidths = [0] * len(lists)
    for x in range(0, len(lists[0])):
        for y in range(0, len(lists)):
            colWidths[y] = len(max(lists[y]))
            fillChar= 0
            fillChar = colWidths[x] - len(lists[y][x])
            print(lists[y][x].rjust(fillChar, ' ' ) + ' ' , end = '' )

print(colWidths)
printTable(tableData)

我一直得到的输出如下。

apples Alice dogs 
oranges Bob cats 
cherries Carol moose
 Traceback (most recent call last):
  File "/Users/DakotaDickey/Documents/Python Projects /Examples/PrintTable.py", line 36, in <module>
    printTable(tableData)
  File "/Users/DakotaDickey/Documents/Python Projects /Examples/PrintTable.py", line 17, in printTable
    fillChar = colWidths[x] - len(lists[y][x])
IndexError: list index out of range

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

这很简单:

for item1, item2, item3 in zip(*tableData):
    print(item1.rjust(10) +  item2.rjust(10) + item3.rjust(10))

这将为您单独获取物品并将其格式化为表格。您的整个程序已经浓缩为两行:)

这是它的工作原理:

  • zip(l1,l2)有两个列表l1l2,并返回单个列表,其中包含l1l2的相应元素合并成一个元组。
  • zip(*tableData)更进一步, tableData解包到其各自的列表中。它相当于在这种情况下执行zip(tableData[0], tableData[1], tableData[2])
  • rjust(width)通过width右对齐字符串。

答案 1 :(得分:0)

为了跟进上一个答案,这有点笼统......

# Find the maximum length of the words ...
w = max([ max(map(len, m)) for m in tableData ]) + 1

# print the data ...
print '\n'.join([''.join(map(lambda x: str(x).rjust(w), m)) for m in zip(*tableData)])

答案 2 :(得分:0)

list = [['apples', 'oranges', 'cherries', 'banana'],
        ['Alice', 'Bob', 'Carol', 'David'],         
        ['dogs', 'cats', 'moose', 'goose']]         


def swaplist(list):                                 
    result_list = []                                
    for index in range(0, len(list[0])):               
        temp_list = []                              
        for i in list:                              
            temp_list.append(i[index])              
        result_list.append(temp_list)               
    return result_list                              

print swaplist(list)                           

只是打印

list = [['apples', 'oranges', 'cherries', 'banana'],
        ['Alice', 'Bob', 'Carol', 'David'],         
        ['dogs', 'cats', 'moose', 'goose']]         


def swaplist(list):                                 
    for index in range(0, len(list[0])):               
        temp_list = []                              
        for i in list:                              
            temp_list.append(i[index])              
        print " ".join(temp_list)                   

swaplist(list)