我想在
中划分元素的差异A = [1,2,3,4]
通过
B = [6,7,9].
我做了:
for i in range(len(A)):
A[i+1]-A[i]/B[i]
但是,这给了我一个错误:“IndexError:list index out of range”
答案 0 :(得分:3)
In [16]: A = [1,2,3,4]
In [17]: B = [6,7,9]
In [18]: [(A[i+1]-A[i])/num for i,num in enumerate(B)]
Out[18]: [0.16666666666666666, 0.14285714285714285, 0.1111111111111111]
或者,如果你已经设置了for循环:
In [19]: answer = []
In [20]: for i in range(len(B)):
....: answer.append((A[i+1]-A[i])/B[i])
....:
In [21]: answer
Out[21]: [0.16666666666666666, 0.14285714285714285, 0.1111111111111111]
答案 1 :(得分:3)
由于您在循环中使用i+1
,当您到达最后一次迭代时,i == 3
,A[4]
和B[4]
超出了范围:
您正在寻找的是:
for i in range(len(A)-1):
*something* (A[i+1]-A[i])/B[i]
将迭代[0,1,2]
答案 2 :(得分:2)
另一种选择是:
[(a-aa)/float(b) for a, aa, b in zip(A[1:], A[:-1], B)]
请注意,您的列表是整数列表。既然你似乎正在使用python 2.7,你要么需要强制转换浮动(因为我在我的解决方案中入侵),或者你可以使用from __future__ import division
来正确处理整数除法。
答案 3 :(得分:1)
当然可以。在您的示例中,range(len(A))
将从0变为3,但B[3]
不存在。 A[3+1]
也没有。
所以简单的做法是将其更改为range(len(B))
。
接下来的事情是计算没有做你想要的,因为除法是在减法之前完成的,所以你需要把它改成(A[i+1] - A[i]) / B[i]
。
最后,你需要将它存储在某个地方。这就是一起:
C = [0] * len(B)
for i in range(len(B)):
C[i] = (A[i+1] - A[i]) / B[i]
要了解如何在一行中完成所有操作,请查看@ inspectorG4dget的答案。
最后,正如@jorgeh所指出的那样:在这个例子中,你正在进行整数除法,这导致向下舍入的整数结果,在你的例子中所有结果都是0。
答案 4 :(得分:1)
res = ((A[i+1] - A[i]) / (num*1.0) for i, num in enumerate(B)))
另一种方式
from itertools import imap
res = imap(lambda x, y, z: (x-y)/(z*1.0), A[1:], A[:-1], B)