我有一个功能:
def func(i, k):
j = 0
while True:
yield j * i + k
j += 1
还有一些i和k实例:
pars = [(2, 4), (1, 5), (7, 2)]
如何在不知道pars的长度的情况下压缩pars的func?像这样:
for func_tups in zip(func(2, 4), func(1, 5), func(7, 2)):
print func_tups
我想象地图,拉链,lambda,*的一些组合?
解决方法:
您正在寻找itertools.starmap()
:
from itertools import starmap
for func_tups in zip(*starmap(func, pairs)):
# warning, infinite loop unless you have a break condition
这里starmap()将任意长度对作为func的参数应用,然后您可以将其作为单独的参数传递给zip().你不能在这里使用map(),因为它只支持带有一个参数的callables.
这假设你使用的是Python 3 zip();在Python 2上,您显然需要使用itertools.izip()来处理由func()生成器生成的无限序列的元组作为可迭代:
from itertools import starmap, izip
for func_tups in izip(*starmap(func, pairs)):
# warning, infinite loop unless you have a break condition