[英]How to divide elements of a list by elements of another list with different dimension?
[英]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 == 3
, A[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.