我有一个包含列表的列表,我想在 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," "))
答案 0 :(得分:4)
你可以这样使用zip()
:
>>> for v in zip(*tableData):
print (*v)
a 1 one
b 2 two
c 3 three
d 4 four
你可以明显改善格式化(就像@Holt做得很好),但这是基本的方法:)
答案 1 :(得分:2)
您可以使用zip
转置您的表格,然后使用formatted string输出您的行:
row_format = '{:<4}' * len(tableData)
for t in zip(*tableData):
print(row_format.format(*t))
答案 2 :(得分:0)
你想转置这个。这在python中最容易。之后,您只需要关心自己的打印格式。
transposed_tabe = zip(*tableData )
如果你有一个列表my_list = [('Math',80),('Physics',90),('Biology',50)]那么我们可以说这是3X2矩阵。它的转置将是2X3矩阵。
transposed_tabe = zip(*my_list )
将进行以下输出
[('数学','物理','生物'),(80,90,50)]
答案 3 :(得分:0)
如果您仍然希望可变字符串,只需一次打印一行:
for k in range(len(tableData[0])):
for v in range(len(tableData)):
print(tableData[v][k], end = ' ')
print()
通过这种方式,您可以使用经典的字符串方法ljust(),rjust()和center()来格式化列。
答案 4 :(得分:0)
如果要自动使用.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