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

これは、累乗値が 0 の場合に追加の乗算を単純に回避する for ループを持つ関数として記述できます。たとえばif n !=0: product *= f ** n、必要に応じてループします。リスト内包表記とラムダは、より良い代替手段になる可能性があると思います。

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 に答える