如何按行打印嵌套列表中的子列表?附示例与待完善代码
解决嵌套列表的转置打印问题
嘿,我来帮你搞定这个打印格式的问题!首先咱们先明确需求:你手里的alist是一个包含4个列表的元组,现在要把它行列转置后打印,还要加上表头,对吧?
先看你现有的代码框架,其实核心问题是循环的对象不对,而且表头得单独处理。咱们一步步来:
第一步:打印表头
首先要输出第一行的list1 list2 list3 list4,得和后面的数据格式对齐,所以用同样的{:>8}格式控制宽度:
print("{:>8} {:>8} {:>8} {:>8}".format("list1", "list2", "list3", "list4"))
第二步:转置原列表
你需要的是把原列表的列变成行,Python里有个超方便的操作——zip(*alist),它会把原列表中每个子列表的对应位置元素打包成元组,正好就是我们要的每一行数据:
- 原
alist的子列表是[1,2,3]、[4,5,6]... zip(*alist)后得到的是(1,4,7,10)、(2,5,8,11)、(3,6,9,12)这三个元组,完美对应三行数据!
第三步:循环打印转置后的行
把原来的循环对象换成转置后的结果,然后用你写的格式化字符串输出每个元素就行:
for row in zip(*alist): print("{:>8.2f} {:>8.2f} {:>8.2f} {:>8.2f}".format(*row))
这里的*row是把元组里的元素拆成单独的参数传给format,正好匹配四个占位符。
完整代码
把这些拼起来就是完整的解决方案:
alist = ([1,2,3],[4,5,6],[7,8,9],[10,11,12]) # 打印表头 print("{:>8} {:>8} {:>8} {:>8}".format("list1", "list2", "list3", "list4")) # 转置并打印数据行 for row in zip(*alist): print("{:>8.2f} {:>8.2f} {:>8.2f} {:>8.2f}".format(*row))
运行这段代码就能得到你想要的输出啦:
list1 list2 list3 list4 1.00 4.00 7.00 10.00 2.00 5.00 8.00 11.00 3.00 6.00 9.00 12.00
内容的提问来源于stack exchange,提问作者Chuepapiii
相关产品推荐
相关产品推荐

