3

Python では、次のようfoo()に組み込み関数を使用して、リストのすべての要素に関数を適用できます。map()

def foo(x):
  return x*x

print map(foo, [1, 2, 3, 4])

これは、推測できるように、1 4 9 16 と出力されます。

関数foo()が 1 つではなく 2 つの引数を受け入れるようになり、次のように定義されているとします。

def foo(x, y):
  return x+y

この場合、x はリストの要素であり、y はリスト全体で同じ数です。この場合、リストのすべての要素に foo() が適用され、すべての要素に同じ別の引数 y を受け取るように、map() を使用するにはどうすればよいでしょうか?

私は次のようなことができるようにしたいと思います:

print map(foo(:, 5), [1, 2, 3, 4])

これは私に与えるはずです:6 7 8 9。

Pythonで可能ですか?'y'すべての要素に追加するこの特定の例には、代替手段がある可能性があります。しかし、私はを使用する答えを探していますmap()

4

2 に答える 2

6

ラムダ関数を使用できます。これは通常の関数と同じように扱われ、x値は反復子のパラメーターであり、x+5この場合は戻り値です。

>>> def foo(x, y)
...   return x + y
...
>>> l = [1, 2, 3, 4]
>>> map(lambda x: foo(x, 5), l)
[6, 7, 8, 9]

記録のために、@PaoloMorettiは私の前にこれを持っていました:)

于 2012-10-18T08:52:00.933 に答える
5

これを行う1つの方法は、次の方法ですfunctools.partial

>>> from functools import partial
>>> def foo(x, y):
...     return x + y
... 
>>> l = [1, 2, 3, 4]
>>> map(partial(foo, y=2), l)
[3, 4, 5, 6]
>>> 

もう1つの方法は、関数の定義方法を変更することです。

>>> def foo(y):
...     def inner(x):
...         return x + y
...     return inner
... 
>>> map(foo(2), l)
[3, 4, 5, 6]
>>> 

ちなみに、Paolo Morettiが言っlambdaたように、これを行うには、を使用するのが最も簡単な方法です。あなたが説明した方法を使わなければならない特別な理由はありますか?map()

于 2012-10-18T08:58:16.677 に答える