2

次のようなリストがあります。

lst = [1, 2, 3, 4, 5, 6]

私はそれぞれ引数を持つ多数の関数を持っています:

mul = lambda lst, val: [i * val for i in lst]
add = lambda lst, val1, val2: [i + val1 + val2 for i in lst]
...

それぞれが可変数の引数を持つ任意の数の関数を取り、これらの関数をリストに順番に適用できる高階関数を作成したいと思います。次のようになります。

>>> functions([mul, (10)], [add, (10, 100)]
[120, 130, 140, 150, 160, 170]

Pythonでこれを行うにはどうすればよいですか?

4

3 に答える 3

4

連鎖したfunctools.partialを使用します。例えば、

from functools import partial

lst = [1, 2, 3, 4, 5, 6]

mul = lambda lst, val: [i * val for i in lst]
add = lambda lst, val1, val2: [i + val1 + val2 for i in lst]

mul10 = partial(mul, val=10)
add_10_100 = partial(add, val1 = 10, val2 = 100)
print add_10_100(mul10(lst))

[120, 130, 140, 150, 160, 170]
于 2013-03-29T12:49:18.213 に答える
4

これはあなたが望むことをします:

mul = lambda lst, val: [i * val for i in lst]
add = lambda lst, val1, val2: [i + val1 + val2 for i in lst]

def functions(lst, *fns):
    for fn, args in fns:
        lst = fn(lst, *args)
    return lst

lst = [1, 2, 3, 4, 5, 6]
result = functions(lst, [mul, (10,)], [add, (10, 100)])
print result

生成:

[120, 130, 140, 150, 160, 170]

関数を別の方法で構成したい場合があります。

mul = lambda i, val: i * val
add = lambda i, val1, val2: i + val1 + val2

def functions(lst, *fns):
    for fn, args in fns:
        lst = [fn(i, *args) for i in lst]
    return lst

そして、他の人が指摘しているように、numpy はこれらすべてを行うように設計されており、さらに多くのことを行うように設計されています。

于 2013-03-29T12:42:23.010 に答える
0

再発明する代わりにnumpy、それを使用してください!

import numpy as np

lst = np.arange(1, 7)
print lst * 10 + 10 + 100
[120 130 140 150 160 170]
于 2013-03-29T12:41:57.610 に答える