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

Python中如何获取嵌套列表的全层级元素总长度

Python嵌套列表全层级元素计数实现

你需要先将任意层级的嵌套列表展平为一维列表,再对展平后的列表取长度即可得到总元素数,匹配你给出的代码框架的实现逻辑如下:

方法1:递归展平(写法简洁,适配常规嵌套场景)

核心逻辑是遍历列表内的每个元素,如果元素本身是列表,就递归展开该子列表的所有元素,非列表元素直接存入结果列表,最终得到的一维列表长度就是全层级元素总数。

def flatten(nested_lst):
    flat_res = []
    for ele in nested_lst:
        # 判断当前元素是否为子列表,是就递归展开
        if isinstance(ele, list):
            flat_res.extend(flatten(ele))
        else:
            flat_res.append(ele)
    return flat_res

my_list = [6, 36, [54, 5], 13, [3, 5], ["b", 2]]
# 替换原有do something部分
new_list = flatten(my_list)
print(len(new_list))

执行上述代码会输出预期结果9,展平后的new_list内容为[6, 36, 54, 5, 13, 3, 5, 'b', 2],长度刚好匹配预期。

方法2:迭代展平(适配超深嵌套场景,无递归栈溢出风险)

如果你的列表嵌套层级极深(比如超过Python默认递归深度阈值1000),递归写法会触发栈溢出错误,此时可以用基于栈的迭代写法实现展平:

def flatten(nested_lst):
    flat_res = []
    # 初始化栈,存入列表的迭代器
    stack = [iter(nested_lst)]
    while stack:
        try:
            ele = next(stack[-1])
            if isinstance(ele, list):
                # 遇到子列表就把它的迭代器压入栈
                stack.append(iter(ele))
            else:
                flat_res.append(ele)
        except StopIteration:
            # 当前迭代器遍历完成就弹出栈
            stack.pop()
    return flat_res

my_list = [6, 36, [54, 5], 13, [3, 5], ["b", 2]]
new_list = flatten(my_list)
print(len(new_list))

补充说明:如果你的嵌套结构中还包含元组、集合等其他可迭代嵌套类型,只需要修改类型判断条件即可,例如将isinstance(ele, list)改为isinstance(ele, (list, tuple, set)),就能同时识别这几类嵌套容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:57:48