python – 从元组列表传递参数的zip生成器

我有一个功能:

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
上一篇:ios开发中加载的image无法显示


下一篇:python – 更改列表中元组中的值