我正在尝试以一种格式打印二维列表,该格式将每列的长度包装为该列中最长单词的长度(加上2个空格填充)。下面我尝试实现的示例:
null
当前,我的代码几乎实现了此目的,但是如果一行中的项目少于最大项目数,它会保留最后“ n”个列的数量。下面的示例:
t1 thing2 t3 t4
thing5 t6 thingymajig7 thing8
thing9 thing10
到目前为止,这是我代码的一部分:
t1 thing2
thing5 t6
thing9 thing10
我需要添加/更改什么才能阻止它删除不完整的列?
答案 0 :(得分:0)
问题似乎出在这行:
widths = [max(len(item) for item in col) for col in zip(*rows)]
摘自zip文档:https://docs.python.org/3/library/functions.html#zip
最短的可迭代输入耗尽时,迭代器停止。
因此,rows
中的每个列表都必须加长到rows
中的最长列表的长度,此脚本才能起作用。您可以这样实现:
rows = [['thing1', 'thing2', 'thing3', 't4'], ['t5', 't6', 'thingymajig7', 'thing8'], ['thing9', 'thing10']]
max_row_len = len(max(rows, key=len))
for row in rows:
row_len = len(row)
row.extend(['blank' for f in range(max_row_len - row_len)])
widths = [max(len(item) for item in col) for col in zip(*rows)]
for r in rows:
print(" ".join((item.ljust(width) for item, width in zip(r, widths))))
然后可以将'blank'
替换为''