簡體   English   中英

如何將一個列表的元素之差除以另一列表的元素?

[英]How to divide the difference of the elements of one list by the elements of another list?

我想划分元素的差異

A = [1,2,3,4]

通過

B = [6,7,9].

我做了:

for i in range(len(A)):
          A[i+1]-A[i]/B[i]

但是,這給了我一個錯誤,提示:“ IndexError:列表索引超出范圍”

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]

因為您在循環中使用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]

另一個選擇是:

[(a-aa)/float(b) for a, aa, b in zip(A[1:], A[:-1], B)]

請注意,您的列表是整數列表。 由於您似乎正在使用python 2.7,因此您要么需要from __future__ import division為浮點數(如我在解決方案中from __future__ import division ),要么可以使用from __future__ import division來正確處理整數除法。

當然可以。 在您的示例中, 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。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM