如何将列表按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]
需要实现两种输出格式:
- 4列横向输出:
21 22 23 24 25 26 27 28 29 30 39 39 44 42 40 43 ...
- 转置(纵向)输出:
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
相关产品推荐
相关产品推荐

