如何编写按维度嵌套打印多维列表元素的Python函数?
解决多维列表按嵌套层级打印的问题
我来帮你搞定这个需求!你想要的是根据元素的嵌套维度用缩进区分层级,同一层级的元素打在一行,空列表也要输出对应缩进的空行,而且每一行开头带#对吧?咱们先拆解下你现有代码的问题,再给出修正方案。
现有代码的问题
你的代码逻辑有几个关键问题导致输出不符合预期:
- 在
else分支里错误地使用了整个当前列表lst来拼接字符串,而不是只处理当前的非列表元素,导致重复打印整行内容 - 没有处理空列表的场景,空列表应该输出对应缩进的空行
- 递归的顺序不对,没有先收集完当前层级的所有元素再处理子列表
修正后的实现代码
下面是调整后的函数,完全符合你的期望输出:
def print_list(lst, spaces=0): # 收集当前层级的所有非列表元素 current_elements = [] for item in lst: if isinstance(item, list): # 如果当前层级已经收集了元素,先打印这一行 if current_elements: print(f"#{' ' * spaces} {', '.join(map(str, current_elements))}") current_elements = [] # 清空列表,避免重复打印 # 递归处理子列表,缩进层级+1 print_list(item, spaces + 1) else: current_elements.append(item) # 处理当前层级剩余的元素(比如列表末尾没有子列表的情况) if current_elements: print(f"#{' ' * spaces} {', '.join(map(str, current_elements))}") # 处理空列表:当前列表为空时,打印对应缩进的空行 elif not lst: print(f"#{' ' * spaces}")
代码逻辑解释
- 收集当前层级元素:遍历列表时,先把所有非列表元素收集到
current_elements中,这样能保证同一层级的元素打在一行 - 遇到子列表时的处理:一旦碰到子列表,先把当前已经收集的元素打印出来(如果有的话),再递归进入子列表,同时缩进层级加1
- 处理剩余元素:遍历完当前列表后,检查是否还有未打印的元素,确保不会遗漏
- 空列表处理:如果当前列表是空的,就打印对应缩进的空行,符合你的示例要求
测试示例
运行你的测试列表:
mylst = [[1, 2, [3, 4, [6]]], [[], [], [3, 4, 5]]] print_list(mylst)
输出结果和你期望的完全一致:
# 1, 2 # 3, 4 # 6 # # # 3, 4, 5 #
内容的提问来源于stack exchange,提问作者MyselfBruh
相关产品推荐
相关产品推荐

