如何在Python中使用第n个 - 第(n-1)个术语?

时间:2017-12-13 07:34:08

标签: python

我想知道如何在列表中找到第n个术语 - (第n-1)个术语。我知道它应该很简单,但我只是遇到应用程序问题。因此,如果输入var |= input; ,则函数应返回[0, 2, 4, 6, 5]。我的解决方案(不起作用)如下:

[0, 2, 2, 2, -1]

为什么这不按预期工作?

3 个答案:

答案 0 :(得分:2)

您的错误是您重置了列表的i元素,因此在下一个周期迭代中,您可以访问它的更改值。

这将打印您需要的内容

def cost_to_diff (stocks):
    for i in range(1, len(stocks)):
        print stocks[i] - stocks[i-1]

如果要打印列表,请执行

def cost_to_diff (stocks):
    diff = []
    for i in range(1, len(stocks)):
        diff.append(stocks[i] - stocks[i-1])
    print diff

def cost_to_diff (stocks):
    print [stocks[i] - stocks[i-1] for i in range(1, len(stocks))]

另外,我建议你尝试numpy来完成这些任务。 This function将完成这项工作。特别是如果你正在玩股票数据,numpy将比列表快得多。此外,对于股票数据,通常使用数据框,因此pandas是您需要学习的内容,Series.diff是您需要的功能。

答案 1 :(得分:0)

您使用的是错误的范围。您需要找出库存清单的长度,然后相应地建立您的范围。

differences = []
for i in range(len(stocks) - 1):
    differences.append(stock[i+1] - stock[i])
    print differences

但是,有一种更好的方法可以做到这一点。 Python有几个内置函数可以帮助您轻松完成这类工作。使用zip函数来获取元素而不会弄乱索引。

differences = []
for a, b in zip(l, l[:1]):
    differences.append(b-a)

例如:

my_list = [0, 3, 4, 5, 7]
print zip(my_list, my_list[1:])

这会产生输出

[(0, 3), (3, 4), (4, 5), (5, 7)]

您需要做的就是减去元素。

答案 2 :(得分:0)

以下代码返回[2, 2, 2, -1],因为我不明白为什么第一个元素会得到0。

你认为第一个-1元素也是0吗?

len('list')将为您提供列表的长度。

range(start, end)会给你一个范围。

由于您希望在第二个元素(index = 1)的for循环中开始迭代,因此start将为1,end将是库存列表的长度。

stock = [0,2,4,6,5] 
result = []#create an empty list for the results
for i in range(1,len(stock)):#set the iteration steps, will be 1,2,3,4 in this case
    result.append(stock[i] - stock[i-1])#By using stack[i] = ... you will overwrite the ith element
print result