首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将函数的参数(即lambda )映射到元组?

将函数的参数(即lambda )映射到元组?
EN

Stack Overflow用户
提问于 2015-08-19 19:55:57
回答 3查看 970关注 0票数 1

下面是函数调用,我试图构造函数fee,我需要使用functional映射元组。所以它变成了(6-7)**2 + (7-1)**2 + (1-4)**2,最后一个是(4-6)**2。然后,我将对这些值进行求和,并在fee中返回这个值。

代码语言:javascript
运行
复制
fee((6, 7, 1, 4), lambda x, y: (x-y) ** 2)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-19 20:01:39

您可以使用python 内建函数

代码语言:javascript
运行
复制
>>> def fee(tup):
...    return sum(map(lambda x,y:(x-y)**2,tup,tup[1:]+(tup[0],)))

演示:

代码语言:javascript
运行
复制
>>> t=(6, 7, 1, 4)
>>> fee(t)
50

可以使用map函数对对应用lambda函数,并对结果进行求和:

代码语言:javascript
运行
复制
>>> zip(t,t[1:]+(t[0],))
[(6, 7), (7, 1), (1, 4), (4, 6)]

作为一种更有效的方法,您可以使用mapsum中的生成器表达式来代替sum

代码语言:javascript
运行
复制
>>> def fee(tup):
...    return sum((x-y)**2 for x,y in zip(tup,tup[1:]+(tup[0],))))
票数 3
EN

Stack Overflow用户

发布于 2015-08-19 20:02:11

您可以使用zipmapsum的组合来完成这一任务。

代码语言:javascript
运行
复制
def fee(vals):
    x1 = zip(vals, vals[1:] + [vals[0]])
    x2 = map(lambda t: (t[0] - t[1]) ** 2, x1)
    return sum(x2)

解释:

  1. zip(vals, vals[:-1] + [vals[0]])vals组合成一个2元组对的列表.
  2. map(lambda t: (t[0] - t[1]) ** 2, x1)对每个二元组元素执行数学运算.
  3. sum(x2)将#2的结果相加在一起。
票数 1
EN

Stack Overflow用户

发布于 2015-08-19 20:14:08

这应该可以做到:

代码语言:javascript
运行
复制
from itertools import tee

try:
    from itertools import izip as zip  # Python 2
except ImportError:
    pass  # Python 3


# An itertools recipe
# https://docs.python.org/3/library/itertools.html#itertools-recipes
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)


def fee(args, func):
    last_value = func(args[-1], args[0])
    return sum(func(x, y) for x, y in pairwise(args)) + last_value


print(fee((6, 7, 1, 4), lambda x, y: (x-y) ** 2))  # 50
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32104514

复制
相关文章

相似问题

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