Python 如何连接这些列?(自动化无聊的东西第6章实践项目)
实践问题要求我将tabledata中的嵌套列表排列到右对齐的列中,每个列有一个嵌套列表。我已经知道了如何将每列中的每个单词右对齐到正确的列长度,但是我不知道如何将列连接到列表中,而不是将它们作为一列打印出来 我已经尝试通过提前迭代来连接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'
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:哦,是的,代码也需要更改……再次感谢您的提醒。