next(i for i,v in enumerate(l) if is_odd(v))
生成器的好处是它们只能计算所请求的数量。因此,请求前两个索引非常简单(几乎):
y = (i for i,v in enumerate(l) if is_odd(v))
x1 = next(y)
x2 = next(y)
但是,在最后一个索引之后会产生StopIteration异常(这是生成器的工作方式)。知道没有找到这样的值时,这在“先行”方法中也很方便- list.index()函数将在此处抛出ValueError。