2011-08-15 5 views
2

intとlongを含むリストでreduceを呼び出そうとしています。たとえば、Pythonでintsをlongsを含むリストでreduceを呼びたい

reduce(int.__mul__, [ 231212312412L, 3 ], 1) 

ですが、実装されていないエラーが発生します。私がintのmulメソッドをlongのmulメソッドに置き換えると、intを取得していると不平を言います。私はそれらをすべて最初に長い地図にする必要がありますか?このような。

reduce(long.__mul__, map(long, [ 12312412314L, 5 ]), 1L) 
+0

ます。また、初期値を指定する必要はありません、それが起動するシーケンスから最初の2つの項目がかかります。 – agf

+2

ちょうど 'for'ループを作成します。より高速で読みやすいです。 – JBernardo

答えて

7
>>> from operator import mul 
>>> reduce(mul, map(long, [ 12312412314L, 5 ]), 1) 
61562061570L 
>>> reduce(mul, [ 231212312412L, 3 ], 1) 
693636937236L 
>>> 

オペレータがあります

5

int.__mul__は2つの整数だけを掛けることができ、同様にlong.__mul__は2つの整数です。

reduce(lambda x,y: x*y, [ 231212312412L, 3 ], 1) 

をyesまたは、operator.mulを使用していますが、インポートすることを忘れないでください:しかし、通常の*オペレータは自動的に「*」ので、あなたが何ができるかは、単に仕事にオフ渡しラムダを使用している、あなたのためのさまざまな数値型を処理しますそれはまず! (これはおそらく速いだろう、実際に)

2

あなたはその空想reduceは必要ありません。

total = 1 
for x in your_list: 
    total *= x 
はるかに読みやすいです

と速く

関連する問題