Python 2.7新手求助:不使用pandas/prettytable实现列表表格化打印
解决Python 2.7无库表格输出问题
嘿,我来帮你调整代码,实现你想要的整齐表格效果!你的思路方向是对的,但有几个小细节需要优化:比如只计算了listA的最大长度,没考虑data里元素的宽度,而且缺少分隔线让表格结构更清晰。
修正后的代码
def print_results_table(data, listA): # 计算每一列的最大宽度:行标题列 + data的每一列 column_widths = [] # 行标题列的最大宽度(对应表格第一列) row_header_max = max(len(t) for t in listA) column_widths.append(row_header_max) # 计算每一列数据的最大宽度,同时和对应表头长度对比取最大值 for col_idx in range(len(data[0])): col_elements = [str(row[col_idx]) for row in data] col_max = max(len(elem) for elem in col_elements) col_max = max(col_max, len(listA[col_idx])) column_widths.append(col_max) # 打印表头行:空字符串 + listA的元素 header_parts = ['{:>{width}s}'.format('', width=column_widths[0])] for idx, header in enumerate(listA): header_parts.append('{:>{width}s}'.format(header, width=column_widths[idx+1])) print(' '.join(header_parts)) # 打印分隔线,让表头和数据行区分开 separator_parts = ['-' * width for width in column_widths] print(' '.join(separator_parts)) # 打印每一行数据:行标题 + 对应data行内容 for row_title, row_data in zip(listA, data): row_parts = ['{:>{width}s}'.format(row_title, width=column_widths[0])] for idx, elem in enumerate(row_data): row_parts.append('{:>{width}s}'.format(str(elem), width=column_widths[idx+1])) print(' '.join(row_parts)) listA = ["Alpha","Beta","gama","cat"] data = [["A","B","C","D"],["E","F","G","H"],["I","J","K","L"],["M","N","O","P"]] print_results_table(data, listA)
输出效果
运行后你会得到这样整齐的表格:
Alpha Beta gama cat ----- ----- ----- ----- ----- Alpha A B C D Beta E F G H gama I J K L cat M N O P
关键优化点
- 全面计算列宽:不仅考虑
listA的元素长度,还覆盖了data中每一列的最大宽度,同时保证表头能完全显示 - 添加分隔线:让表头和数据行的层级更清晰,表格结构一目了然
- 精准对齐:每一列都按照各自的最大宽度右对齐,彻底避免内容错位的问题
内容的提问来源于stack exchange,提问作者user11201509
相关产品推荐
相关产品推荐

