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

如何将嵌套列表转为扁平列表?请排查我的Python代码错误

嵌套列表扁平化代码的问题分析

我们需要实现一个能将嵌套整数列表扁平化的迭代器,输入嵌套列表后逐个输出扁平化后的整数。先看你给出的代码:

def eb34(list1):
   
    flat_list = []
    
    for i in range(len(list1)):
        if type(list[i]) == list:
            flat_list += flatten(list1[i])
        else:
            flat_list.append(list1[i])
        
    return flat_list

这段代码存在以下几个问题:

  • 函数名与递归调用不匹配:函数定义的名字是eb34,但递归调用时用了flatten,运行时会触发NameError,找不到flatten函数。
  • 变量名错误:循环里写的是list[i],这里的list是Python内置的列表类型,不是传入的参数list1,应该改为list1[i],否则同样会引发NameError。
  • 类型判断不够严谨:用type(item) == list判断是否为列表的方式有局限性,如果遇到继承自list的自定义子类,这个判断会失效。更合适的写法是isinstance(item, list),它能正确识别子类实例。
  • 未实现迭代器需求:当前代码直接返回一个扁平化的列表,而题目要求实现迭代器。迭代器需要通过yield关键字来生成元素,而不是一次性返回所有结果,这样更节省内存,符合迭代器的设计思路。

修正后的代码示例

版本1:返回扁平化列表(修复基础错误)

def flatten(list1):
    flat_list = []
    # 直接遍历列表元素,比range(len())更简洁直观
    for item in list1:
        if isinstance(item, list):
            flat_list += flatten(item)
        else:
            flat_list.append(item)
    return flat_list

版本2:实现迭代器(符合题目要求)

def flatten_iterator(list1):
    for item in list1:
        if isinstance(item, list):
            # 使用yield from递归迭代子列表的元素
            yield from flatten_iterator(item)
        else:
            yield item

使用迭代器的测试示例:

nested_list = [1, [4, [6]]]
for num in flatten_iterator(nested_list):
    print(num)  # 依次输出:1、4、6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:09:24