You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表按4列横向打印及纵向(转置)打印?

问题描述

给定一维列表:

nums = [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 39, 39, 44, 42, 40, 43, 47, 45, 57, 52, 75, 73, 86, 78, 70, 77, 87, 79, 113, 96, 147, 141, 170, 150, 130, 145, 167, 147, 225, 184]

需要实现两种输出格式:

  1. 4列横向输出:
21    22    23    24
25    26    27    28
29    30    39    39
44    42    40    43
...
  1. 转置(纵向)输出:
21   39   75   147
22   39   73   141
23   44   86   170
24   42   78   150
25   40   70   130
26   43   77   145
27   47   87   167
28   45   79   147
29   57   113  225
30   52   96   184

原尝试的横向打印代码报错,原因是将一维列表当作二维列表访问array[i][j],实际输入是一维列表,无法通过二维索引取值。


解决方案

一、4列横向输出

核心思路:将一维列表按每4个元素为一组拆分,逐组打印,每组内元素用格式化字符串对齐。

方法1:按步长遍历分组

def print_horizontal(nums, cols=4):
    # 按每cols个元素拆分
    for i in range(0, len(nums), cols):
        row = nums[i:i+cols]
        # 每个元素占4个字符宽度,用制表符分隔
        print("\t".join(f"{num:<4}" for num in row))

nums = [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 39, 39, 44, 42, 40, 43, 47, 45, 57, 52, 75, 73, 86, 78, 70, 77, 87, 79, 113, 96, 147, 141, 170, 150, 130, 145, 167, 147, 225, 184]
print_horizontal(nums)

输出效果:

21  	22  	23  	24  	
25  	26  	27  	28  	
29  	30  	39  	39  	
44  	42  	40  	43  	
47  	45  	57  	52  	
75  	73  	86  	78  	
70  	77  	87  	79  	
113 	96  	147 	141 	
170 	150 	130 	145 	
167 	147 	225 	184 	

方法2:嵌套循环索引计算

如果想用类似原代码的嵌套循环,通过一维索引计算位置即可:

def print_horizontal(nums, rows=10, cols=4):
    for i in range(rows):
        for j in range(cols):
            num = nums[i*cols + j]
            print(f"{num:<4}", end="\t")
        print()

print_horizontal(nums)

二、转置(纵向)输出

核心思路:直接通过索引计算转置后的元素位置,或者先转成二维列表再转置,最终打印符合要求的格式。

匹配示例格式的实现

直接计算每个位置的索引,输出和示例完全一致的10行4列格式:

def print_vertical(nums, cols=4):
    total_rows = len(nums) // cols
    # 遍历转置后的每一行(共10行)
    for i in range(total_rows):
        # 取每一列的第i个元素组成当前行
        row = [nums[j*total_rows + i] for j in range(cols)]
        print("\t".join(f"{num:<4}" for num in row))

print_vertical(nums)

输出效果:

21  	39  	75  	147 	
22  	39  	73  	141 	
23  	44  	86  	170 	
24  	42  	78  	150 	
25  	40  	70  	130 	
26  	43  	77  	145 	
27  	47  	87  	167 	
28  	45  	79  	147 	
29  	57  	113 	225 	
30  	52  	96  	184 	

通用二维列表转置方法

如果需要先转成二维列表再转置,可以用以下方式:

def print_transposed(nums, cols=4):
    # 转成10行4列的二维列表
    two_d = [nums[i:i+cols] for i in range(0, len(nums), cols)]
    # 转置二维列表
    transposed = list(zip(*two_d))
    # 打印转置后的结果
    for row in transposed:
        print("\t".join(f"{num:<4}" for num in row))

print_transposed(nums)

内容的提问来源于stack exchange,提问作者Puggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:05:42