如何将一个列表的元素的差异除以另一个列表的元素?

时间:2015-05-20 01:04:48

标签: python python-2.7

我想在

中划分元素的差异
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”

5 个答案:

答案 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 == 3A[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)