首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一系列函数应用于列表

将一系列函数应用于列表
EN

Stack Overflow用户
提问于 2013-03-29 20:34:39
回答 3查看 96关注 0票数 2

我有一个列表,看起来像这样:

代码语言:javascript
复制
lst = [1, 2, 3, 4, 5, 6]

我有许多函数,每个函数都有参数:

代码语言:javascript
复制
mul = lambda lst, val: [i * val for i in lst]
add = lambda lst, val1, val2: [i + val1 + val2 for i in lst]
...

我想创建一个高阶函数,它可以接受任意数量的函数,每个函数都有可变数量的参数,然后将这些函数应用到列表中。它可能看起来像这样:

代码语言:javascript
复制
>>> functions([mul, (10)], [add, (10, 100)]
[120, 130, 140, 150, 160, 170]

我如何在python中做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-29 20:42:23

这就是你想要的:

代码语言:javascript
复制
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

产生:

代码语言:javascript
复制
[120, 130, 140, 150, 160, 170]

您可能希望以不同的方式构造函数:

代码语言:javascript
复制
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的设计目的是做所有这些事情,甚至做更多的事情。

票数 4
EN

Stack Overflow用户

发布于 2013-03-29 20:49:18

使用functools.partial,链式。例如,

代码语言:javascript
复制
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]
票数 4
EN

Stack Overflow用户

发布于 2013-03-29 20:41:58

与其重新发明numpy,不如使用它!

代码语言:javascript
复制
import numpy as np

lst = np.arange(1, 7)
print lst * 10 + 10 + 100
[120 130 140 150 160 170]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15703336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档