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