2017-10-19 447 views
-3

我需要乘以不同的列表来计算不规则多边形的面积。Python中的列表乘法运算

X = [1,1,1,1,1,1] 
Y = [5,4,3,2,1,0] 

这意味着从点1是(1,5)即坐标,为点2是(1,4)等。要计算面积,我需要乘以X[i] * Y[i+1],这等于1 * 4, 1 * 3, 1 * 2,并排除最后一个乘法,例如1 * empty

我该怎么做?

+5

“我该怎么做?”你有什么尝试? – DeepSpace

+3

你的输出应该是什么样子?你有什么尝试?请[编辑]问题。 – Tgsmith61591

+0

有了地图功能和很好的切片清单,应该很容易做 – Axnyff

回答

4

所以,在我的理解,你需要XY,其中Y第一个元素被排除之间的滞后,以及X最后一个元素被排除在外。换句话说,你需要的东西,如:

[(1, 4), (1, 3), (1, 2), (1, 1), (1, 0)] 

您可以通过产生上述:

zipped = zip(X[:-1], Y[1:]) 

,你可以计算每对的产品,像这样:

[a * b for a, b in zipped] 

中当然,如果XY是numpy阵列,您可以做得更高效:

>>> X[:-1] * Y[1:] 
array([4, 3, 2, 1, 0]) 
+1

说实话,你甚至不需要切分X.'zip(X,Y [1:])'将会提供相同的输出,因为'zip'消耗最短的迭代时会停止。不切片X保存一些内存。 – DeepSpace

2

喜欢的东西

[x * y for x, y in zip(X, Y[1:])] 

会做到这一点。但你真的应该使用Numpy来做任何不重要的事情。

+0

我不能单独使用numpy“Python”,我知道用numpy这很容易。谢谢! – Daniel