Python列表append实现与动态表格化显示问题求助
动态适配列表长度的表格显示方案
原代码中display函数硬编码了3列的解包逻辑和格式模板,当使用append给子列表添加元素后,子列表长度超过3就会触发ValueError——既无法将多元素列表解包到固定的3个变量中,固定的表头和格式字符串也无法适配动态变化的列数。
以下是修改后的完整代码,可实现动态适配任意长度子列表的表格显示:
date = [['Monday', 'Tuesday', 'Wednesday'], ['January', 'February', 'March'], [2000, 2010, 2020]] def display(): # 获取所有子列表中最长的长度,确定表格总列数 max_col_count = max(len(sublist) for sublist in date) # 动态生成表头,格式为“1th date、2th date...” headers = [f"{idx+1}th date" for idx in range(max_col_count)] # 生成对应列数的格式化字符串,每列宽度设为15,左对齐 format_string = ' '.join(['{:<15}' for _ in range(max_col_count)]) # 打印表头 print(format_string.format(*headers)) # 打印分割线,长度匹配总列宽 print('-' * (15 * max_col_count)) # 遍历每个子列表,动态打印每行内容 for sublist in date: # 若当前子列表长度不足总列数,补空字符串对齐表格 padded_sublist = sublist + [''] * (max_col_count - len(sublist)) print(format_string.format(*padded_sublist)) def add(): list_num = int(input('Enter which list(1, 2, 3): ')) list_num = list_num - 1 print(date[list_num]) if list_num == 2: new_var = int(input('Enter new item: ')) else: new_var = str(input('Enter new item: ')) date[list_num].append(new_var) print(date[list_num]) print('Successfully added!') display() add() display()
关键改动说明
- 动态确定列数:通过
max(len(sublist) for sublist in date)获取最长子列表的长度,以此作为表格的总列数,适配任意数量的新增元素。 - 动态生成表头和格式模板:根据总列数自动生成对应数量的表头文本和格式化字符串,彻底移除硬编码逻辑。
- 补全短列表对齐:对长度不足总列数的子列表补充空字符串,保证每行的列数一致,维持表格的规整对齐。
- 移除固定解包:不再使用
first, second, third = i这种固定数量的解包操作,改用format(*padded_sublist)动态传递参数,适配任意长度的子列表。
内容的提问来源于stack exchange,提问作者ANTOINE
相关产品推荐
相关产品推荐

