我在python中工作,我有一个列表列表(或者也可能是一个numpy数组),如下所示:
list = [[0, 0, -1], [1, 1, -2], [1, 2, -3], [2, 2, -4]]
我有一个函数,它为每个子列表提供前两个元素并给出结果。让我们假设我正在使用的函数是sum() 所以我想做的是
list1 = [[sum(0, 0), -1], [sum(1, 1), -2], [sum(1, 2), -3], [sum(2, 2), -4]]
,输出
list1 = [[0, -1], [2, -2], [3, -3], [4, -4]]
map
或numpy.vectorize
是否可以解决这个问题?我已经可以将它作为一个循环来实现,但它对于我的真实数据来说太贵了。
任何帮助,建议?
答案 0 :(得分:3)
如果是numpy数组,你应该使用矢量化获得最快的结果:
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]])
答案 1 :(得分:2)
可能是
[(sum(x, y), z) for x, y, z in list]
或者,如果您坚持使用map
使用itertools.starmap
:
starmap( lambda x, y, z: (x+y, z), list)
答案 2 :(得分:1)
对于您的具体示例,您可以使用列表推导,如下所示:
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)
<强>输出强>
[[0, -1], [2, -2], [3, -3], [4, -4]]
要对列表中的每个项目应用更复杂的通用函数,请使用map
:
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)
使用功能func
,您可以根据需要自定义功能。