Python代码输出generator object而非分块列表问题求助
解决生成器对象输出而非预期分块列表的问题
嘿,我一眼就瞅出问题所在啦!你现在打印出来的generator object chunks at 0x05DAF8D0是生成器对象的内存标识,不是你想要的分块列表,原因很简单:
你的chunks函数用了yield关键字,这是个生成器函数——调用它的时候不会直接生成所有分块数据,而是返回一个生成器对象,它是惰性求值的,只有当你主动迭代它的时候,才会逐步产出数据。你之前的代码只是把这个生成器对象直接塞进了列表里,并没有触发它生成实际的分块内容。
两种修正方案:
方案一:直接获取分块列表
把生成器转换成列表,用list()包裹调用chunks的结果:
fruit = ['apple', 'pear', 'banana'] def chunks(l, n): for i in range(0, len(l), n): yield l[i:i+n] list_of_lists = list(chunks(fruit, 2)) print(list_of_lists) # 输出:[['apple', 'pear'], ['banana']]
方案二:生成包含分块列表的嵌套列表
如果你确实需要外层再套一个列表(比如原代码的[(chunks(...))]写法),同样要把生成器转成列表后再放进去:
fruit = ['apple', 'pear', 'banana'] def chunks(l, n): for i in range(0, len(l), n): yield l[i:i+n] list_of_lists = [list(chunks(fruit, 2))] print(list_of_lists) # 输出:[[['apple', 'pear'], ['banana']]]
简单来说,生成器不会自动把结果吐出来,你得用list()或者for循环去“逼”它产出所有数据才行~
内容的提问来源于stack exchange,提问作者StrangeQuark
相关产品推荐
相关产品推荐

