如何将列表元素按18×4矩阵格式打印为规整表格,解决format排版失效问题
需求说明
我目前希望将列表中的所有元素打印为18×4规格的矩阵或规整表格形式。此前我尝试使用format字符串格式化方法实现该需求,但始终未能达成预期效果。
我期望的最终输出效果可参考目标示意图,具体排布规则为:将列表的前18个元素打印在第一列,后续每18个元素依次放入第二列、第三列、第四列,最终形成完整的18行4列表格。由于英语并非我的母语,若描述存在不够清晰的地方还请谅解,非常感谢大家提供的帮助。
实现说明
常规的表格格式化逻辑默认按行优先填充内容,和你要求的「按列优先填充」规则不匹配,按如下逻辑操作即可:
- 把原始列表按每18个元素切分,切出来的4个分段就对应4列的内容
- 逐行取4个分段同索引的元素拼接成一行输出
- 用统一宽度的格式化字符串对齐,就能得到规整的表格
Python 参考代码
假设原始列表为 my_list,总长度需要为 18 * 4 = 72,长度不足可提前用空值补齐:
# 长度不足时用空字符串补齐 my_list += [""] * (72 - len(my_list)) # 切分得到4列内容 columns = [my_list[i*18 : (i+1)*18] for i in range(4)] # 逐行输出,<代表左对齐,数字代表每个元素预留的字符宽度,可根据实际元素长度调整 for row_idx in range(18): print(f"{columns[0][row_idx]:<10}{columns[1][row_idx]:<10}{columns[2][row_idx]:<10}{columns[3][row_idx]:<10}")
也可以用zip函数简化拼接逻辑,效果完全一致:
for row in zip(*[my_list[i*18 : (i+1)*18] for i in range(4)]): print(f"{row[0]:<10}{row[1]:<10}{row[2]:<10}{row[3]:<10}")
如果是数字类型的元素需要右对齐,把格式化符号里的<换成>即可。
内容的提问来源于stack exchange,提问作者ElonTusk1312
相关产品推荐
相关产品推荐

