如何使用Python将函数应用于列表中的元素对?

时间:2014-01-30 10:28:10

标签: python list numpy

我有一个数字列表,我想以百分比的形式找到其中元素的差异。目前我正在使用for循环。还有另一种方式,也许是使用numpy?

example_list = [1., 5., 4., 2., 10., 8., 3., 1.]
percentage_difference = []
for index, i in enumerate(example_list):
    if index + 1 < len(example_list):
        previous = example_list[index + 1]
        difference = round((previous - i) / previous , 3)
        percentage_difference.append(difference)

输出说明:(5 - 1)/ 1

3 个答案:

答案 0 :(得分:2)

您可以使用numpy.diff

In [13]: import numpy as np

In [14]: a = np.array([1., 5., 4., 2., 10., 8., 3., 1.])                                         

In [15]: np.diff(a)/a[1:]                                                                        
Out[15]: 
array([ 0.8       , -0.25      , -1.        ,  0.8       , -0.25      ,                          
       -1.66666667, -2.        ])      

In [16]: np.round(np.diff(a)/a[1:], 3)
Out[16]: array([ 0.8  , -0.25 , -1.   ,  0.8  , -0.25 , -1.667, -2.   ])

在纯Python中,您可以使用zip使用map或列表理解来执行此操作。以下是使用map的示例:

>>> def calculate(x_y):
    x, y = x_y
    return round((x-y)/x, 3)

>>> map(calculate, zip(lis[1:], lis[:-1]))
[0.8, -0.25, -1.0, 0.8, -0.25, -1.667, -2.0]

答案 1 :(得分:1)

使用numpy和切片

import numpy as np
example_list = np.array([1., 5., 4., 2., 10., 8., 3., 1.])
percentage_difference=np.round((example_list[1:]-example_list[:-1])/example_list[1:],3)

答案 2 :(得分:0)

我不确定你是否希望(5,4)分组为-0.2或-0.25,所以他的顺序是

b = [(a[i+1] - x)/float(x) for i,x in enumerate(a[:-1:])]
>>> [4.0, -0.2, -0.5, 4.0, -0.2, -0.625, -0.6666666666666666]

b = [(a[i+1] - x)/float(a[i+1]) for i,x in enumerate(a[:-1:])]
>>> [0.8, -0.25, -1.0, 0.8, -0.25, -1.6666666666666667, -2.0]