Python深度嵌套列表处理:将给定嵌套列表转为目标子列表集合
问题解决方法
你的需求是将嵌套列表中每个元素展开为扁平的、由同一数字重复对应次数组成的子列表。你之前的代码存在变量未定义、逻辑错误的问题,无法正常运行。以下是几种可行的实现方式:
方法一:递归扁平化处理
通过递归函数将每个嵌套元素展开为扁平列表,再遍历原列表完成转换:
def flatten(item): if isinstance(item, list): res = [] for sub_item in item: res.extend(flatten(sub_item)) return res else: return [item] N = [1, [2, 2], [[3, 3], 3], [[[4, 4], 4], 4], [[[[5, 5], 5], 5], 5]] result = [flatten(item) for item in N] print(result) # 输出: [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5]]
方法二:迭代扁平化处理(避免递归深度限制)
如果嵌套深度极大,递归可能触发栈溢出,用迭代方式更安全:
def flatten(item): stack = [item] res = [] while stack: current = stack.pop() if isinstance(current, list): stack.extend(current) else: res.append(current) # 因栈的特性结果顺序反转,但所有元素为同一数字,不影响最终效果 return res N = [1, [2, 2], [[3, 3], 3], [[[4, 4], 4], 4], [[[[5, 5], 5], 5], 5]] result = [flatten(item) for item in N] print(result) # 输出与方法一一致
方法三:利用元素特征简化实现
由于每个嵌套元素内的数字完全相同,可直接提取该数字后生成对应长度的列表,效率更高:
def get_target_num(item): while isinstance(item, list): item = item[0] return item N = [1, [2, 2], [[3, 3], 3], [[[4, 4], 4], 4], [[[[5, 5], 5], 5], 5]] result = [[get_target_num(item)] * get_target_num(item) for item in N] print(result) # 输出符合预期
内容的提问来源于stack exchange,提问作者stack0114106
相关产品推荐
相关产品推荐

