生成器表达式在管道式处理中未达预期效果的原因咨询
问题原因解析
你的第一个代码失效的核心问题出在生成器的迭代层级上:
split_lines = (line.split() for line in lines)这个生成器,每次迭代产出的是一整行拆分后的单词列表(比如某行是"foo bar",它就返回["foo", "bar"])。- 而
words = (word for word in split_lines)这里的迭代对象是split_lines,所以word变量每次拿到的是split_lines产出的整个列表,而不是列表里的单个单词。最终循环打印的自然是一个个完整的单词列表,而非你想要的单个单词。
要实现逐词打印,你需要完成两层迭代:先遍历每行得到单词列表,再遍历列表得到单个单词。你的嵌套循环写法就是手动完成了这两层迭代,所以能正常工作。
如果想用生成器表达式实现需求,可以把两层迭代逻辑整合到一个生成器里:
lines = open("file.txt") words = (word for line in lines for word in line.split()) for word in words: print(word)
这个写法等价于你的嵌套循环,生成器会先遍历文件的每一行,再遍历该行拆分后的每个单词,最终每次产出的都是单个单词,符合预期。
内容的提问来源于stack exchange,提问作者steep
相关产品推荐
相关产品推荐

