我想我会使用这个简单的单线:
import itertools
print list(itertools.imap(pow, [1, 2, 3], itertools.repeat(2)))
更新:
我还想出了一个比有用的解决方案更有趣的解决方案。这是一个漂亮的语法糖,受益于 Python3中的...
字面意思。Ellipsis
它是 的修改版本partial
,允许省略最左边和最右边之间的一些位置参数。唯一的缺点是您不能再将省略号作为参数传递。
import itertools
def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*(newfunc.leftmost_args + fargs + newfunc.rightmost_args), **newkeywords)
newfunc.func = func
args = iter(args)
newfunc.leftmost_args = tuple(itertools.takewhile(lambda v: v != Ellipsis, args))
newfunc.rightmost_args = tuple(args)
newfunc.keywords = keywords
return newfunc
>>> print partial(pow, ..., 2, 3)(5) # (5^2)%3
1
>>> print partial(pow, 2, ..., 3)(5) # (2^5)%3
2
>>> print partial(pow, 2, 3, ...)(5) # (2^3)%5
3
>>> print partial(pow, 2, 3)(5) # (2^3)%5
3
所以原始问题的解决方案是这个版本的部分list(map(partial(pow, ..., 2),xs))