内置方式将函数应用于列表的后续成员并返回新列表

时间:2012-06-03 22:38:36

标签: python functional-programming python-2.7

我正在寻找python中的内置函数,它将函数应用于每个元素和列表中的下一个元素(或其他可迭代的函数),并在新列表中返回结果集。我不知道是否内置了,但是如果可能的话,我试图以功能的方式处理它。

示例:

l = [1,2,3,4,5]
# returns [3,5,7,9]
# add(1,2) add(2,3) add(3,4) add(4,5)

我的实际用例是我有一个numpy.array([1,2,3])形式的向量列表,我想找到每个连续向量之间的差异。

实际例子:

l = [numpy.array([1,2,3]), numpy.array([2,7,6]), numpy.array([4,5,6])]
# find the difference between each vector (l[0]-l[1], l[1]-[l2], .. etc)

3 个答案:

答案 0 :(得分:10)

您需要pairwise()map()

答案 1 :(得分:4)

最直接的方法是列表理解:

a = [l[i] + l[i+1] for i in range(len(l)-1)]

或者,您可以使用一点内置魔法:

map(sum, zip(l, l[1:]))

答案 2 :(得分:2)

使用numpy.diff()查找NumPy数组的连续条目之间的差异:

>>> a = numpy.array([5, 2, 3, 1, 4])
>>> numpy.diff(a)
array([-3,  1, -2,  3])

这将比任何纯Python解决方案快得多。

编辑:以下是二维数组的示例:

>>> a = numpy.array([[1,2,3], [2,7,6], [4,5,6]])
>>> numpy.diff(a, axis=0)
array([[ 1,  5,  3],
       [ 2, -2,  0]], dtype=int32)