如何将二维数组内不等长单词打印为居中对齐的等距网格?
实现不等长单词二维数组的居中对齐网格打印
要实现这种每列单词居中、间距均匀的网格效果,关键是先确定每一列的最大单词长度,然后让每个单词按照对应列的长度居中对齐。下面是具体的解决方案:
步骤说明
- 计算每列的最大宽度:通过转置二维数组(把列转换成行),遍历每一列的所有单词,找出最长单词的长度,作为该列的标准宽度。
- 格式化每行单词:对每行的每个单词,使用字符串的
center()方法,按照对应列的宽度进行居中处理(方法会自动在单词两侧填充空格,保证总长度等于列宽)。 - 拼接并打印:把格式化后的单词拼接成一行,输出即可得到整齐的网格。
完整代码
arr = [ ['eighteen', 'twenty-two', 'twenty-one', 'ten', 'twenty-three'], ['eleven', 'thirteen', 'four', 'three', 'twenty'], ['twenty-eight', 'six', 'fourteen', 'seventeen', 'twenty-seven'], ['twenty-four', 'two', 'nine', 'one', 'five'], ['sixteen', 'fifteen', 'twelve', 'twenty-nine', 'seven']] # 计算每一列的最大宽度:转置数组后遍历每一列(转置后的行) col_widths = [max(len(word) for word in col) for col in zip(*arr)] # 遍历每一行,格式化并打印 for row in arr: # 对每个单词按对应列的宽度居中对齐 formatted_items = [word.center(width) for word, width in zip(row, col_widths)] # 拼接成一行输出(如果想增加列间距,可把' '换成' '或更多空格) print(' '.join(formatted_items))
输出效果
eighteen twenty-two twenty-one ten twenty-three eleven thirteen four three twenty twenty-eight six fourteen seventeen twenty-seven twenty-four two nine one five sixteen fifteen twelve twenty-nine seven
额外调整
如果希望列之间的间距更大,只需要修改join的分隔符即可,比如用' '.join(formatted_items),这样列与列之间会有两个空格的空隙,视觉上更宽松。
内容的提问来源于stack exchange,提问作者William Bentley




