截断python生成器

时间:2015-08-04 21:58:21

标签: python generator

我想知道Pythonic编写生成器表达式的方法,该表达式采用无限生成器n的第一个g元素。目前,我这样做:

(x for x,_ in zip(g,range(n)))

有更多的Pythonic方式吗?

2 个答案:

答案 0 :(得分:7)

islice

将islice包装在一个函数中会很有意义,代码比我下面的代码短得多:

from itertools import islice

def first_n(iterable, n):
    return islice(iterable, 0, n)

和用法:

>>> first_n(xrange(100), 10)
<itertools.islice object at 0xffec1dec>
>>> list(first_n(xrange(100), 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

<强>替代

这是另一种选择:

def first_n(iterable, n):
    it = iter(iterable)
    for _ in xrange(n):
        yield next(it)

和用法:

>>> first_n(xrange(100), 10)
<generator object first_n at 0xffec73ec>
>>> list(first_n(xrange(100), 10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

答案 1 :(得分:2)

itertools.islice(g,0,10)

应该这样做吗?

你可能需要list(itertools.islice(g,0,10))(因为它返回一个迭代器)

相关问题