计算两个数字之间的百分比变化(Python)

计算两个数字之间的百分比变化(Python),python,Python,我有一个价格清单,我试图计算每个数字百分比的变化。我用计算机计算了差异 prices = [30.4, 32.5, 31.7, 31.2, 32.7, 34.1, 35.8, 37.8, 36.3, 36.3, 35.6] def f(): for i in range(len(prices)): print(prices[i]-prices[i-1]) 它返回的差异如下 2.1 -0.8 -0.5 ..

我有一个价格清单,我试图计算每个数字百分比的变化。我用计算机计算了差异

    prices = [30.4, 32.5, 31.7, 31.2, 32.7, 34.1, 35.8, 37.8, 36.3, 36.3, 35.6]

    def f():
        for i in range(len(prices)):
            print(prices[i]-prices[i-1])
它返回的差异如下

    2.1
    -0.8
    -0.5
    ...
我知道百分比的变化是((I-(I-1))/(I-1)*100,但我不知道如何将其纳入脚本中。任何帮助都将不胜感激。

尝试以下方法:

prices = [30.4, 32.5, 31.7, 31.2, 32.7, 34.1, 35.8, 37.8, 36.3, 36.3, 35.6]

for a, b in zip(prices[::1], prices[1::1]):
    print 100 * (b - a) / a
编辑:如果要将其作为列表,可以执行以下操作:

print [100 * (b - a) / a for a, b in zip(prices[::1], prices[1::1])]

如果您没有接触过Python中的pandas库(http://pandas.pydata.org/),你一定要去看看

这样做很容易:

import pandas as pd
prices = [30.4, 32.5, 31.7, 31.2, 32.7, 34.1, 35.8, 37.8, 36.3, 36.3, 35.6]

price_series = pd.Series(prices)
price_series.pct_change()

虽然肯定不是最优雅的方式,但如果您想定义一个函数,它将如下所示:

def pctc(Q):
    output = [0]
    for i in range(len(Q)):
        if i > 0:
            increase = Q[i]-Q[i-1]
            percentage = (increase/Q[i]) * 100
            output.append(percentage)
    return(output)

可能有更好的方法来实现该功能,但至少很清楚。:)

您可能想要
范围(1,len(prices))
-否则,它打印的第一件事情将是列表中最后和第一个元素之间的差异。您的更改百分比公式有误。。。你可能会想到一个%误差方程,它类似于abs(x-y)/x,其中x是理论上正确的值,但差值是abs(x-y)/average x,yy你是对的,大卫。我按照您的建议更改了范围,并将最后一行修改为
print((prices[I]-prices[I-1])/prices[I-1]*100)
现在提问有点晚了,但是我如何将f()的输出转换为列表呢?编辑:在第一对值之后,数字变为:6.90789473684,-1.57728706625,4.281345575,5.58659217877,0.0,0.0,-5.5900621118,0.327868852459,0.0您期望的输出是什么?可能是我把您的代码复制错了,我不知道。我这里有正确的输出:6.90789473684,-2.46153846154,-1.57728706625,4.80769230769,4.28134556575,4.9853372434,5.58659217877,-3.96825396825,0.0,-1.92837465565,0.0。但是,你知道我如何将所有这些单独的输出转换成一个列表吗?这正是这个列表的输出,除了最后的0.0——但不应该只有10个输出(而不是11个)?嗯,你是对的。我一定是输入错了。我的实际价格清单比我在这里输入的要长,所以我想我在给你这些数字时输入了不同的清单。我希望输出类似于['6.90789473684'、'-2.46153846154'、'-1.57728706625'、'4.80769230769'…],而不是单独输出。