python - 将第 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]
另外:我无法导入任何模块。所以我必须坚持使用内置插件。
解决方案
使用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]
推荐阅读
- javascript - 如何在html中为音频标签赋予标题
- api - 适用于 Google Kubernetes Engine (GKE) 的 REST API
- oracle - 如何在 PowerDesigner 中实现没有外键的物理数据模型
- c++ - 2 个期货之间的依赖关系
- html - Understanding Css Grouping
- php - WooCommerce checkout stuck on loading
- python - 我应该在 Python 中大写常量吗?
- mysql - SQL where 查询到 IN 条件的第一行
- javascript - 当单选按钮选择为否时禁用需要消息
- mysql - Mysql 组复制:永远卡在 RECOVERING 上