我正在使用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来解决这个问题?我已经可以把它当作循环来做了,但是对于我的真实数据来说,这太昂贵了。
有什么建议吗?
发布于 2016-01-26 21:49:41
在使用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]])发布于 2016-01-26 21:36:10
可能是这样吗?
[(sum(x, y), z) for x, y, z in list]或者,如果您坚持使用map,请使用itertools.starmap
starmap( lambda x, y, z: (x+y, z), list)发布于 2016-01-26 21:39:51
对于您的特定示例,可以使用列表理解,如下所示:
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)通过使用function func,您可以根据需要自定义函数。
https://stackoverflow.com/questions/35015021
复制相似问题