我想知道Pythonic编写生成器表达式的方法,该表达式采用无限生成器n
的第一个g
元素。目前,我这样做:
(x for x,_ in zip(g,range(n)))
有更多的Pythonic方式吗?
答案 0 :(得分:7)
将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))
(因为它返回一个迭代器)