现在,我现在有一段代码,该代码接受一个字符串列表,并输出整洁的列,每列之间有两个空格,如下所示:
thing1 t2 thing3 t4
thing5 thing6 thingymajig7 thing8
t9 thing10
但是,我希望这些列能够一直填充到右边,以尽可能多地适合。当前,在构建二维数组时,我已对硬编码的列数进行了编码。我在下面的代码中标记了特定的行:
rNum = 0
count = 1
rows = [[]]
# build 2-dimensional array
for item in result.split():
if count%5 == 0: # hard coded number of columns in each row
rows[rNum].append(item)
rows.append([])
rNum += 1
else:
rows[rNum].append(item)
count += 1
maxRowLen = len(max(rows, key=len))
# extend rows to uniform length to work with zip()
for r in rows:
rowLen = len(r)
r.extend(["" for f in range(maxRowLen - rowLen)])
widths = [max(len(item) for item in col) for col in zip(*rows)]
# print rows in neat format
for r in rows:
print(" ".join((item.ljust(width) for item, width in zip(r, widths))))
我遇到的主要问题是,仅检查第一行是不可靠的,因为在较低行中具有较长字符串的任何列都会延长该列的长度。不幸的是,如果不先构建整个组件,我将无法检查每列的最大长度。
现在我正在考虑必须动态测试每个列数(最长到最短,对于较大的输入,从一个合理的数量开始),并在打印之前累加宽度,并继续尝试直到得到一个宽度适合。我希望有比这更优雅的解决方案。
预先感谢您的帮助!