Python如何在控制台中垂直对齐打印两个列表?
Python实现类似C++ setwidth()的列表元素对齐打印
要实现列表元素垂直对齐打印,核心是给每个元素设置统一的显示宽度,Python的格式化字符串可以直接实现类似C++ setwidth()的效果,具体操作如下:
方法一:自动适配最大元素宽度
先计算所有元素转为字符串后的最长长度,确保所有元素都能按这个宽度对齐,兼容性更强:
arr = [100, -23, -23, 404, 100, 23, 23, 23, 3, 404] mem = [0, 10, 10, 10, 1, 10, 10, 10, 10, 10] # 计算所有元素的最大显示宽度 all_elements = arr + mem max_width = max(len(str(num)) for num in all_elements) # 格式化单个列表为对齐的字符串 def format_aligned_list(lst, name, width): formatted_items = [f"{num:>{width}}" for num in lst] return f"{name} = [{', '.join(formatted_items)}]" # 打印结果 print(format_aligned_list(arr, "arr", max_width)) print(format_aligned_list(mem, "mem", max_width))
方法二:指定固定宽度
如果提前知道元素的最大长度,直接指定宽度更高效:
arr = [100, -23, -23, 404, 100, 23, 23, 23, 3, 404] mem = [0, 10, 10, 10, 1, 10, 10, 10, 10, 10] # 指定固定宽度为3(匹配示例中最长元素的长度) width = 3 # 格式化并打印 formatted_arr = [f"{x:>{width}}" for x in arr] formatted_mem = [f"{x:>{width}}" for x in mem] print(f"arr = [{', '.join(formatted_arr)}]") print(f"mem = [{', '.join(formatted_mem)}]")
效果说明
两种方法运行后都会输出对齐的结果:
arr = [100, -23, -23, 404, 100, 23, 23, 23, 3, 404] mem = [ 0, 10, 10, 10, 1, 10, 10, 10, 10, 10]
其中f"{num:>{width}}"是核心:
>表示右对齐(如果需要左对齐用<,居中用^)width就是元素的显示宽度,不足的部分会自动补空格,和C++setwidth()的作用完全一致。
内容的提问来源于stack exchange,提问作者W.Nathaniel
相关产品推荐
相关产品推荐

