Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以从生成器中选择特定项目吗?_Python_Python 2.7_Generator - Fatal编程技术网

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