我发现自己正在使用这两个自定义生成器并且认为“必须有一个itertools函数或已经做过的东西!虽然没有找到。我错过了什么?谢谢!
def gothru(iters):
for i in iters:
for j in i:
yield j
def overnover(fn,startval):
val = startval
while True:
val = fn(val)
yield val
编辑:我后来想象overnover
如何用来生成斐波那契序列,我意识到需要推广它以允许函数有多个参数
def overnover(fn,*args):
while True:
args = fn(*args)
return args
然后你可以这样做:
fibInfo = overnover(lambda x,y: (x+y, x), 1, 1)
- > (2,1)......(3,2)......(5,3)......(8,5)...... 然后:
fib = imap(lambda x:x[0], fibInfo)
- > 2 ... 3 ... 5 ... 8 ...
谢谢你们!
答案 0 :(得分:5)
第一个是chain.from_iterable
。
与overnover
最接近的是tabulate
:
def tabulate(function, start=0):
"Return function(0), function(1), ..."
return imap(function, count(start))
这是函数的一个特例,它输出序列号。 count
也需要step
,因此您可以将其概括为
def tabulate(function, start=0, step=1):
"Return function(0), function(0+step), ..."
return imap(function, count(start, step))
这是overnover
的一个版本,可让您将值发送到序列中:
def overnover(fn, val):
while True:
val = fn(val)
val = (yield val) or val