首页 > 解决方案 > 将第 i 个元素与 python(3.7) 列表中的第 (j+1) 个元素相乘

问题描述

我有两个包含点的 x 和 y 坐标的列表,如下所示:

x_vert = [1, 2, 3, 4, 5, 1]  
y_vert = [3, 4, 5, 6, 7, 3]

根据计算算法,每个列表的最后一项已经是每个列表的附加第一项。

我想做的是计算不规则多边形的面积。因此,我需要将列表 x_vert 的第 i 个项目与列表y_vert的第 (j+1) 个项目相乘
到目前为止,我尝试了以下方法:

x_vert_mul = [i * (j+1) for i in x_vertices for j in y_vertices]  
y_vert_mul = [i * (j+1) for i in y_vertices for j in x_vertices]

这返回了一个

TypeError: can only concatenate list (not "int") to list

所以我尝试了另一种方法:

x_vert_mul = [i * (j+1) for i, j in zip(x_vertices, y_vertices)]
y_vert_mul = [i * (j+1) for i, j in zip(y_vertices, x_vertices)]

它返回与以前相同的错误。我认为问题出在(j+1)部分。还是我必须以另一种方式进行乘法运算,因为*坚持两个列表的串联?
所以我的问题是:如何访问列表的下一项并将其与第一个列表的另一个所需值相乘?

期望的输出:

x_vert_mul = [4, 10, 18, 28, 15]
y_vert_mul = [6, 12, 20, 30, 7]

另外:我无法导入任何模块。所以我必须坚持使用内置插件。

标签: pythonlist

解决方案


使用zip和列出索引:

In [1]: x_vert = [1, 2, 3, 4, 5, 1]

In [2]: y_vert = [3, 4, 5, 6, 7, 3]

In [3]: x_vert_mul = [i*j for i, j in zip(x_vert[:-1], y_vert[1:])]

In [4]: y_vert_mul = [i*j for i, j in zip(y_vert[:-1], x_vert[1:])]

In [5]: x_vert_mul
Out[5]: [4, 10, 18, 28, 15]

In [6]: y_vert_mul
Out[6]: [6, 12, 20, 30, 7]

推荐阅读