首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将函数映射到子列表python的一部分

将函数映射到子列表python的一部分
EN

Stack Overflow用户
提问于 2016-01-26 21:34:07
回答 3查看 413关注 0票数 2

我正在使用python,我有一个列表列表(或者也可以是一个numpy数组),如下所示:

代码语言:javascript
运行
复制
list = [[0, 0, -1], [1, 1, -2], [1, 2, -3], [2, 2, -4]]

我有一个函数,它获取每个子列表的前两个元素,并给出结果。假设我使用的函数是sum(),所以我想要做的是

代码语言:javascript
运行
复制
list1 = [[sum(0, 0), -1], [sum(1, 1), -2], [sum(1, 2), -3], [sum(2, 2), -4]]

输出结果是

代码语言:javascript
运行
复制
list1 = [[0, -1], [2, -2], [3, -3], [4, -4]]

有没有办法用mapnumpy.vectorize来解决这个问题?我已经可以把它当作循环来做了,但是对于我的真实数据来说,这太昂贵了。

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2016-01-26 21:49:41

在使用numpy数组的情况下,您应该使用矢量化获得最快的结果:

代码语言:javascript
运行
复制
In [128]: arr = np.asarray(list)
#Out[128]:
#array([[ 0,  0, -1],
#       [ 1,  1, -2],
#       [ 1,  2, -3],
#       [ 2,  2, -4]])

In [129]: np.vstack((arr[:,0]+arr[:,1], arr[:,2])).T
#Out[129]:
#array([[ 0, -1],
#       [ 2, -2],
#       [ 3, -3],
#       [ 4, -4]])
票数 3
EN

Stack Overflow用户

发布于 2016-01-26 21:36:10

可能是这样吗?

代码语言:javascript
运行
复制
[(sum(x, y), z) for x, y, z in list]

或者,如果您坚持使用map,请使用itertools.starmap

代码语言:javascript
运行
复制
starmap( lambda x, y, z: (x+y, z), list)
票数 2
EN

Stack Overflow用户

发布于 2016-01-26 21:39:51

对于您的特定示例,可以使用列表理解,如下所示:

代码语言:javascript
运行
复制
my_list = [[0, 0, -1], [1, 1, -2], [1, 2, -3], [2, 2, -4]]

answer = [[x + y, z] for x, y, z in my_list]
print(answer)

输出

代码语言:javascript
运行
复制
[[0, -1], [2, -2], [3, -3], [4, -4]]

要对列表中的每一项应用更复杂的泛型函数,请使用map

代码语言:javascript
运行
复制
def func(sublist):
    return [sum(sublist[:2]), sublist[-1]]

my_list = [[0, 0, -1], [1, 1, -2], [1, 2, -3], [2, 2, -4]]

answer = map(func, my_list)

通过使用function func,您可以根据需要自定义函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35015021

复制
相关文章

相似问题

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