如何更简洁地打印生成器函数的第3步(不使用列表)
更简洁的生成器第3元素打印方案
你的代码可以正常运行,但确实有更简洁的实现方式,而且完全不需要使用列表,两种常用方法如下:
方法1:直接调用next()跳过前两个元素
生成器是惰性迭代的,可以通过多次调用next()手动跳过前两个元素,直接获取并打印第三个元素:
def imparesgen(): n = 0 while n < 200: n += 2 yield n gen = imparesgen() next(gen) # 跳过第一个元素 next(gen) # 跳过第二个元素 print(next(gen)) # 打印第三个元素
方法2:使用itertools.islice(更适合通用场景)
如果需要获取第N个元素(不止第3个),使用itertools.islice会更优雅,它可以在不消耗整个生成器的前提下,直接截取指定位置的元素:
import itertools def imparesgen(): n = 0 while n < 200: n += 2 yield n gen = imparesgen() # islice(生成器, 起始索引, 结束索引),这里取索引2(第三个元素) print(next(itertools.islice(gen, 2, 3)))
两种方法都保持了生成器的惰性特性,不会一次性生成所有元素,内存效率和原代码一致,但代码更简洁易读。
另外小提示:你的生成器函数名imparesgen是西班牙语“奇数生成器”的意思,但当前代码生成的是偶数(2、4、6...),如果是要生成奇数的话,只需要把初始值n = 0改成n = 1即可。
内容的提问来源于stack exchange,提问作者Fire Frekox
相关产品推荐
相关产品推荐

