Python 如何连接这些列?(自动化无聊的东西第6章实践项目)

Python 如何连接这些列?(自动化无聊的东西第6章实践项目),python,for-loop,printing,Python,For Loop,Printing,实践问题要求我将tabledata中的嵌套列表排列到右对齐的列中,每个列有一个嵌套列表。我已经知道了如何将每列中的每个单词右对齐到正确的列长度,但是我不知道如何将列连接到列表中,而不是将它们作为一列打印出来 我已经尝试通过提前迭代来连接for-循环中的字符串(print(list[I]+list[I+1]+list[I+2]…等),但当它再次循环并递增I时,我不断得到索引超出范围的错误 tableData = [['apples', 'oranges', 'cherries', 'banana'

实践问题要求我将tabledata中的嵌套列表排列到右对齐的列中,每个列有一个嵌套列表。我已经知道了如何将每列中的每个单词右对齐到正确的列长度,但是我不知道如何将列连接到列表中,而不是将它们作为一列打印出来

我已经尝试通过提前迭代来连接
for
-循环中的字符串(
print(list[I]+list[I+1]+list[I+2]…等)
,但当它再次循环并递增
I
时,我不断得到
索引超出范围的错误

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

def longlen(strings):
    maximum = 0
    for s in strings:
        if len(s) > maximum:
            maximum = len(s)
    return(maximum)

def printTable(table):
    column_width = [0] * len(table)
    for i in range(len(table)):
        column_width[i] =longlen(table[i])
        for x in range(len(table[i])):
            print(table[i][x].rjust(column_width[i]))

printTable(tableData)
现在我得到了每个单词的正确对齐方式,但我不太明白如何在一个4高3宽的右对齐表格中输出

现在看起来是这样的:

苹果
橘子
樱桃
香蕉
爱丽丝
上下快速移动
颂歌
大卫
狗
猫
驼鹿
鹅
我需要这个:

苹果爱丽丝狗 橘子和猫 樱桃卡罗尔驼鹿 香蕉大雁
类似的功能应该可以使用。为了好玩,我添加了一两个duck,函数只会输出一个空白项,其中列的长度不同

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

def printTable(table):
    # Get length of longest item in each column
    column_widths = [len(max(column, key=len)) for column in table]
    # Get longest column
    longest_col = len(max(table, key=len))
    # Major loop on each item in each nested list
    for j in range(longest_col):
        line = []
        # Nested loop over each nested list
        for i in range(len(table)):
            if j < len(table[i]):
                line.append(table[i][j].rjust(column_widths[i]))
            else:
                line.append(' '*column_widths[i])
        print('  '.join(line))

printTable(tableData)

您可以通过两个步骤完成此操作:

  • 浏览每一行并使用内置字符串方法右对齐每个单词,使其与最长的单词具有相同的长度。为此,您需要首先确定行中最长的单词,这可以使用和函数的组合来完成

  • 使用内置函数转换表的行和列,并打印其中的每一行

  • 请注意,当前编写的代码会更改
    表的内容。如果要避免这种情况,请先复制它

    tableData = [['apples', 'oranges', 'cherries', 'banana'],
                 ['Alice', 'Bob', 'Carol', 'David'],
                 ['dogs', 'cats', 'moose', 'goose']]
    
    def printTable(table):
        for row in table:
            colwidth = max(map(len, row))
            row[:] = [word.rjust(colwidth) for word in row]
    
        for row in zip(*table):
            print(' '.join(row))
    
    
    printTable(tableData)
    

    您只需修改
    printTable()
    函数即可:

    def printTable(table):
        column_width = [0] * len(table)
        for i in range(len(table)):
            column_width[i] =longlen(table[i])
        for x in range(len(table[0])):
            for i in range(len(table)):
                print(table[i][x].rjust(column_width[i]),end=' ')
            print()
    

    主要的变化是我适当地改变了你的
    x
    I
    位置,这样你就可以打印列表的“转置”了。

    告诉我应该输出什么?你能给出预期的输出样本吗?编辑以包括所需的输出。列需要正确对齐,但很难正确对齐如果你已经解决了正确的对齐问题,那么剩下要做的就是对列表列表进行转置。我选择不使用任何内置函数,如
    zip
    等。希望你能理解逻辑here@Kind:Oops.谢谢,陌生人-修复。关闭,但仍在re:)@Kind:哦,是的,代码也需要更改……再次感谢您的提醒。