首页 > 解决方案 > 如何在没有 numpy、zip 等的情况下将列表中的元素相乘并以简单的方式求和

问题描述

我必须将两个列表的相同索引相乘,然后找到它的总和。

请帮帮我!谢谢你。

标签: python-3.x

解决方案


尝试这个,

>>> A=[2, 3, -6, 7, 10, 11]
>>> B=[1, 2, 3, 4, 5, 6]
>>> sum([x * y for x, y in zip(A, B)])
134

让我解释一下我在回答中做了什么,我使用了zip()python内置函数,这就是文档中提到的内容。

创建一个迭代器,聚合来自每个可迭代对象的元素。

返回元组的迭代器,其中第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。当最短的输入迭代用完时,迭代器停止。使用单个可迭代参数,它返回一个 1 元组的迭代器。没有参数,它返回一个空的迭代器。

有点混乱,对吧?检查以下示例:-


>>> A=[2, 3, -6, 7, 10, 11]
>>> B=[1, 2, 3, 4, 5, 6]
>>> zip(A,B)
<zip at 0x1fde73e6f88>  # it display something like this (zip object)
>>> list(zip(A,B))  # for visualization purpose, convert zip object to list
[(2, 1), (3, 2), (-6, 3), (7, 4), (10, 5), (11, 6)]

在此处输入图像描述

我想你可以清楚地知道zip()函数内部发生了什么。zip然后使用 python List Comprehensions将对象中的每个值相乘,以更 Pythonic 的方式回答您的问题。所以 zip 对象现在为我们创建了一个使用AB列表的新值系列。x我们为and分配了这些值y,将它们相乘并保存在列表中。

>>> [x * y for x, y in zip(A, B)]
[2, 6, -18, 28, 50, 66]

在我们用于sum()计算Sum 的所有步骤之后,Python 中的数字列表

>>> sum([2, 6, -18, 28, 50, 66])
134

就是这样,如果您没有得到任何东西,请在此答案中添加评论。


推荐阅读