使用生成器展平嵌套列表时代码输出不符问题求助
问题分析与解决
哈哈,这个问题其实是个超常见的笔误,咱们来掰扯清楚:
原代码的核心错误
先看你贴的这段代码:
def flatten(nested): for sub in nested: for element in nested: # 这里就是问题所在! yield element
内层循环你写的是遍历nested(整个原始列表),而不是当前外层循环拿到的sub(单个子列表)。这就导致:
- 外层循环每迭代一次(比如第一次拿到
[1,2]),内层循环就把整个nested的所有子列表都输出一遍; - 因为
nested有3个子列表,外层循环会跑3次,所以最终就重复输出了3遍[1,2] [3,4] [5]。
修正后的代码
把内层循环的nested改成sub就行:
def flatten(nested): for sub in nested: for element in sub: # 改成遍历当前子列表sub! yield element nested = [[1,2],[3,4],[5]] for num in flatten(nested): print(num, end=' ')
运行结果
修正后执行,输出就和书中完全一致了:
1 2 3 4 5
说白了就是内层循环找错了遍历对象,把整个大列表当成了要展开的子列表,改过来就搞定啦~
内容的提问来源于stack exchange,提问作者haofeng
相关产品推荐
相关产品推荐

