python - 在 Python 中将列表的每个元素与另一个列表的每个元素相乘/相加/相除的有效方法

标签 python numpy data-structures

我想将一个列表的每个元素与另一个列表的每个元素相乘。

lst1 = [1, 2, 1, 2]
lst2 = [2, 2, 2]

lst3 = []

for item in lst1:
    for i in lst2:
        rs = i * item
        lst3.append(rs)

这可行,但在大型数据集中效率非常低,并且可能需要很长时间才能完成循环。请注意,此处两个列表的长度可能不同。

我可以使用非内置数据结构。我检查了 numpy,在 ndarray 中似乎有一种称为广播的方式。我不确定这是否可行。到目前为止,数组与标量的乘法按预期工作。

arr = np.arange(3)
arr * 2

返回:

array([0, 2, 4])

但它们与另一个数组一起工作的方式有点不同,我似乎无法实现上述目标。

我想这一定是直截了当的事情,但我目前似乎无法找到所需的确切解决方案。任何输入将不胜感激。谢谢。

顺便说一句,在不考虑效率的情况下,Scheme也有类似的问题here

编辑:感谢您的回答。乘法有效,请参阅 Dval 的回答。但是,我还需要以完全相同的方式进行加法和除法。出于这个原因,我稍微更新了问题。

编辑:我可以使用 numpy 数组本身,所以我不需要将列表转换为数组并返回。

最佳答案

Numpy 是必经之路,特别是 numpy.outer ,它以矩阵的形式返回每个元素的乘积。使用 .flatten() 将其压缩为 1d。

import numpy
lst1 = numpy.array([1, 2, 1, 2])
lst2 = numpy.array([2, 2, 2])
numpy.outer(lst1, lst2).flatten()

要添加到更新的问题,加法似乎以类似的方式工作:

numpy.add.outer(lst1, lst2).flatten()

关于python - 在 Python 中将列表的每个元素与另一个列表的每个元素相乘/相加/相除的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357085/

相关文章:

python - 使用 numpy 创建许多随机棒坐标的省时方法

r - 如何将命名向量转换为命名列表,同时将具有相同名称的条目分组到一个列表元素中?

python - 使用 Pandas 数据框创建一个类(更新)

python - 如何使用@cython装饰器声明np.ndarray类型

perl - 如何创建哈希的递归哈希? (无限深)

python - 在 Fortran 中实现像快速插值一样的 numpy

python - 从原点和偏移量创建 Pandas DatetimeIndex

python - 关闭流后出现错误?

python - 在同一 Python 服务器中结合 gRPC 标准和异步方法

python - 如何从 numpy 数组转换为文件字节对象?