2012-03-05 3 views
2

私はPythonでいくつかのコード、そのビット単位を持っているか、等しい多次元リスト内のすべての値にbをPythonの:多次元配列/リストにラムダなしでマップを()を使用して

for i in xrange(len(a)): 
    for j in xrange(len(a[i])): 
     a[i][j] |= b 

私の質問と呼ばれますあるラムダ又は

map(lambda x: map(lambda y: y | b, x), a) 
+2

は何高階関数マップ、フィルタを使用するためのユースケースで、関数パラメータなし減らしますか? –

答えて

4

は、私は絶対に1が今までラムダやリストの内包表記を避ける必要がありますない理由を見ていないが、ここに行く:

import operator,functools 
a = map(functools.partial(map, functools.partial(operator.or_, b)), a) 
+1

+1 functoolsのために、これは私にとって初めてのものでした。 –

+0

'functools.partial'は' lambda'に似ていますので、IMHOは正解が*できません*、@ senderleはすでに書いています:http://stackoverflow.com/a/9561602/1763602。 'functools.partial'と' lambda'について:http://stackoverflow.com/a/3252425/1763602 –

3

map以下の例のような他の任意の関数定義を使用せずにのみ(マップ()、フィルタ()、(減らす))を使用してこのコードを記述する方法があり、filter 、およびreduceはすべて機能を持ちます(または少なくともcalla bles - すなわち__call__メソッドを持つもの)を引数として使用します。だから基本的に、いいえ。関数またはクラスを定義する必要があります。

+0

...または明らかに述べるには、別の場所で定義されている組み込み関数を使用してください。 – senderle

0

は、残念ながら、Pythonは何の簡潔なカリー化の構文を持っていないので、あなたはmap(b |, x)ような何かをすることはできません。

私は、リストの内包表記を使用します。

[y | b for x in a for y in x] 
関連する問題