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
相关产品推荐
相关产品推荐

