在列中的列表中打印列表
Print lists in a list in columns
我有一个包含列表的列表,我想在 w/o 列中打印它以导入任何其他模块(即 pprint
)。该任务仅供我了解列表的迭代。这是我的清单:
tableData = [['a', 'b', 'c', 'd'],
['1', '2', '3', '4'],
['one', 'two', 'three', 'four']]
我希望它看起来像这样:
a 1 one
b 2 two
c 3 three
d 4 four
我设法对它的第一行进行了一些硬编码,但我不知道如何为迭代建模。参见:
def printTable(table):
print(table[0][0].rjust(4," ") + table[1][0].rjust(4," ") + table[2][0].rjust(4," "))
你想转置这个。这在 python 中最为简单。之后,您只需要关心自己的打印格式即可。
transposed_tabe = zip(*tableData )
如果你有一个列表 my_list = [('Math', 80), ('Physics',90), ('Biology', 50)] 那么我们可以说这是3X2矩阵。它的转置将是 2X3 矩阵。
transposed_tabe = zip(*my_list )
会产生如下输出
[('Math', 'Physics', 'Biology'), (80, 90, 50)]
您可以像这样使用 zip()
:
>>> for v in zip(*tableData):
print (*v)
a 1 one
b 2 two
c 3 three
d 4 four
您显然可以改进格式(就像@Holt 做得很好)但这是基本方法:)
您可以使用 zip
to transpose your table and then use a formatted string 输出您的行:
row_format = '{:<4}' * len(tableData)
for t in zip(*tableData):
print(row_format.format(*t))
如果您仍然需要可变字符串,只需一次打印一行:
for k in range(len(tableData[0])):
for v in range(len(tableData)):
print(tableData[v][k], end = ' ')
print()
通过这种方式,您可以使用经典的字符串方法 ljust() rjust() 和 center() 来格式化您的列。
如果你想自动使用 .rjust,假设你有包含相同数量字符串的列表,你可以这样做:
def printTable(data):
colWidths = [0] * len(data)
for i in range(len(data)):
colWidths[i] = len(max(data[i], key=len))
for item in range(len(data[0])):
for i in range(len(data)):
print(str(data[i][item]).rjust(colWidths[i]), end=' ')
print()
printTable(tableData)
这样您就不必手动检查列表中最长字符串的长度。
结果:
a 1 one
b 2 two
c 3 three
d 4 four
我有一个包含列表的列表,我想在 w/o 列中打印它以导入任何其他模块(即 pprint
)。该任务仅供我了解列表的迭代。这是我的清单:
tableData = [['a', 'b', 'c', 'd'],
['1', '2', '3', '4'],
['one', 'two', 'three', 'four']]
我希望它看起来像这样:
a 1 one
b 2 two
c 3 three
d 4 four
我设法对它的第一行进行了一些硬编码,但我不知道如何为迭代建模。参见:
def printTable(table):
print(table[0][0].rjust(4," ") + table[1][0].rjust(4," ") + table[2][0].rjust(4," "))
你想转置这个。这在 python 中最为简单。之后,您只需要关心自己的打印格式即可。
transposed_tabe = zip(*tableData )
如果你有一个列表 my_list = [('Math', 80), ('Physics',90), ('Biology', 50)] 那么我们可以说这是3X2矩阵。它的转置将是 2X3 矩阵。
transposed_tabe = zip(*my_list )
会产生如下输出
[('Math', 'Physics', 'Biology'), (80, 90, 50)]
您可以像这样使用 zip()
:
>>> for v in zip(*tableData):
print (*v)
a 1 one
b 2 two
c 3 three
d 4 four
您显然可以改进格式(就像@Holt 做得很好)但这是基本方法:)
您可以使用 zip
to transpose your table and then use a formatted string 输出您的行:
row_format = '{:<4}' * len(tableData)
for t in zip(*tableData):
print(row_format.format(*t))
如果您仍然需要可变字符串,只需一次打印一行:
for k in range(len(tableData[0])):
for v in range(len(tableData)):
print(tableData[v][k], end = ' ')
print()
通过这种方式,您可以使用经典的字符串方法 ljust() rjust() 和 center() 来格式化您的列。
如果你想自动使用 .rjust,假设你有包含相同数量字符串的列表,你可以这样做:
def printTable(data):
colWidths = [0] * len(data)
for i in range(len(data)):
colWidths[i] = len(max(data[i], key=len))
for item in range(len(data[0])):
for i in range(len(data)):
print(str(data[i][item]).rjust(colWidths[i]), end=' ')
print()
printTable(tableData)
这样您就不必手动检查列表中最长字符串的长度。 结果:
a 1 one
b 2 two
c 3 three
d 4 four