Python 我可以从生成器中选择特定项目吗?
与:Python 我可以从生成器中选择特定项目吗?,python,python-2.7,generator,Python,Python 2.7,Generator,与: def合并(a,b): i=j=0 总计=长(a)+长(b) 而i+j
def合并(a,b):
i=j=0
总计=长(a)+长(b)
而i+jnext
结合使用。但是,这将消耗生成器中的步骤,因此实际上与调用next
三次并提取第三个值相同。这只是一种更抽象的方法
def merge(a, b):
i = j = 0
total = len(a) + len(b)
while i + j < total:
if j == len(b) or (i < len(a) and a[i] <= b[j]):
yield a[i]
i += 1
else:
yield b[j]
j += 1
您必须调用next三次。您必须进行迭代。@SimeonVisser&@Ben,因此
xrange
在使用它时也会这样做吗?调用next会占用内存吗?@Ben,这不是真的x=xrange()print(x[2])
),您可以为第三次调用编制索引element@Ben,xrange支持三件事迭代,len和indexing.@PadraicCunningham生成器是迭代器(它们有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我只想说明一下,使用islice
可以提高生成器对象的迭代器状态。@padraickunningham True但问题是生成器,它是迭代器的一个子类。
>>> from itertools import islice
>>> g = (i for i in range(10))
>>> next(islice(g, 2, 2 + 1))
2
>>> next(g)
3