我有一个数字列表,我想以百分比的形式找到其中元素的差异。目前我正在使用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
答案 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]