You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写按维度嵌套打印多维列表元素的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}")

代码逻辑解释

  1. 收集当前层级元素:遍历列表时,先把所有非列表元素收集到current_elements中,这样能保证同一层级的元素打在一行
  2. 遇到子列表时的处理:一旦碰到子列表,先把当前已经收集的元素打印出来(如果有的话),再递归进入子列表,同时缩进层级加1
  3. 处理剩余元素:遍历完当前列表后,检查是否还有未打印的元素,确保不会遗漏
  4. 空列表处理:如果当前列表是空的,就打印对应缩进的空行,符合你的示例要求

测试示例

运行你的测试列表:

mylst = [[1, 2, [3, 4, [6]]], [[], [], [3, 4, 5]]]
print_list(mylst)

输出结果和你期望的完全一致:

#  1, 2
#      3, 4
#          6
#  
#  
#      3, 4, 5
#

内容的提问来源于stack exchange,提问作者MyselfBruh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:10:51