[英]How to print two input lists within a list in separate lines without using NumPy?
[英]How to print lists within a list in separate columns using for loops?
问题出自 ATBS 的第 6 章。 它是创建一个函数,该函数传递一个列表列表,然后打印每个列表但要对齐,以便无论列表中字符串的长度如何,每一列都是整齐和齐平的。
我创建了一个空列表,其元素数量与每个嵌入列表(假设所有长度相同)的元素数量相同,并找到了每个列表中的最大字符串长度,并将此数字添加到空列表中。 然后调用打印由最大字符串长度对齐的每个列表。
table = [['Tom','Dick','Harry','John'],
['Apples','Oranges','Strawberries','Grapes'],
['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]
def printTable(tableData):
colWidths = [0] * len(tableData)
for i in range(len(tableData)):
colWidths[i] = max(len(j) for j in tableData[i])
for i in range(len(tableData)):
for j in tableData[i]:
print(j.rjust(colWidths[i]))
printTable(table)
这将打印以下内容
Tom
Dick
Harry
John
Apples
Oranges
Strawberries
Grapes
Brocolli
Asparagus
Carrots
Potatoes
但我希望它在三个单独的列中而不是一个。 我知道这可以简单地用 zip 来完成,但我还没有涉及。 我想了解如何在覆盖新内容之前使用 for 循环来完成工作,因为我认为这不会帮助我正确学习基础知识。
尝试这个:
table = [['Tom','Dick','Harry','John'],
['Apples','Oranges','Strawberries','Grapes'],
['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]
def printTable(tableData):
colWidths = [0] * len(tableData)
for i in range(len(tableData)):
colWidths[i] = max(len(j) for j in tableData[i])
for i in range(len(tableData)):
for j in tableData[i]:
print(j.rjust(sum(colWidths[:i+1])))
printTable(table)
我所做的只是更改rjust
以证明不仅适用于当前列,还适用于所有以前的列。
好在你已经把所有的宽度都放在了一个列表中:)
这里有一些开始:第一行(我们称之为row0
因为它是索引为 0 的row0
行)是
row0 = [x[0] for x in table]
对于表中的每个列表x
,您取第一个元素。
类似地构造第二行。
要获取所有行,请将其放入循环中for i in range(4)
请注意,如果table
中的元素之一具有不同的长度,您必须以某种方式处理它,但在您的示例中, table
中的所有元素都具有相同的长度4
。
table = [['Tom','Dick','Harry','John'],
['Apples','Oranges','Strawberries','Grapes'],
['Brocolli', 'Asparagus', 'Carrots', 'Potatoes']]
def printTable(tableData):
buffer = []
colWidths = [0] * len(tableData)
for i in range(len(tableData)):
colWidths[i] = max(len(j) for j in tableData[i])
for j in range(len(tableData[i])):
buffer.append("") #filling the buffer array with empty string could have used buffer = ["" for i in range(len(tableData[i]]))]
for i in range(len(tableData)):
for j in range(len(tableData[i])):
buffer[j] += (tableData[i][j].rjust(colWidths[i]))
buffer[j] += " "
for i in range(len(buffer)):
print(buffer[i])
printTable(table)
我所做的就是定义一个缓冲区数组来存储每一行,然后我创建了另一个 for 循环来打印它们。 当您打印一行时,您无法返回该行并添加新元素,因此您必须先创建要打印的行,然后再打印。 由于您想要的输出在每个列表中都有一个项目,因此我将它们连接成一个字符串并用空格字符分隔它们。
输出是
Tom Apples Brocolli
Dick Oranges Asparagus
Harry Strawberries Carrots
John Grapes Potatoes
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.