0

我试图找出一种pythonic的描述性方法来乘以一个数字列表,只要数字不为零,就可以提高到相应的数字。这是我正在做的一个简单版本,我将因素列表硬编码为 [2, 3, 5]:

>>> import operator
>>> ## numbers could be written as lambda factor_list, power_list: [[factor_list[i]...
>>> numbers = lambda x, y, z: [[2, 3, 5][i] ** [x, y, z][i] for i in xrange(3)
        if [x, y, z][i] != 0]
>>> product = lambda numbers: reduce(operator.mul, numbers, 1)
>>> numbers(1, 0, 0)
[2]
>>> product(numbers(1, 0, 0))
2
>>> numbers(1, 2, 3)
[2, 9, 125]
>>> product(numbers(1, 2, 3))
2250

我可以把它写成一个带有for循环的函数,如果幂值等于0,它可以简单地避免任何额外的乘法;例如if n !=0: product *= f ** n并根据需要循环。我觉得列表推导和 lambda 可能是更好的选择。

4

1 回答 1

2

这应该足够pythonic:

>>> from operator import mul

>>> base = [2, 3, 5]
>>> powers = [1, 0, 0]
>>> l = [n**p for n, p in zip(base, powers) if p != 0]
[2]
>>> reduce(mul, l, 1)
2

使用发电机:

>>> from itertools import izip

>>> powers = [1, 2, 3]
>>> numbers = (n**p for n, p in izip(base, powers) if p != 0)
>>> reduce(mul, numbers , 1)
2250
于 2013-08-24T17:40:21.523 回答