我正在尝试将数组中的多个值相加。这就是我所拥有的:
x = ['a', 2, 5, 10],['b', 3, 4, 11], ['c', 4, 2, 12], ['d', 5, 1, 13]
我想将每行的第2和第3个值相乘,然后将所有产品加在一起:
(2*5) + (3*4) + (4*2) + (5*1)
我还需要这个能够无限数量的行。
答案 0 :(得分:0)
只需:
<div id="box1"></div>
但是你也可以在将来使用numpy来操作数组。
答案 1 :(得分:0)
sum(map(lambda item: item[1]*item[2], x))
适用于任意数量的行。我们在这里做的是:
由于我们在这里使用迭代器,即使对于大量行,内存需求也很低。
答案 2 :(得分:0)
你可以在功能上做到:
x = ['a', 2, 5, 10],['b', 3, 4, 11], ['c', 4, 2, 12], ['d', 5, 1, 13]
from operator import itemgetter, mul
from itertools import starmap, imap
print(sum(starmap(mul, imap(itemgetter(1, 2), x))))
35
或功能和拆包的混合:
print(sum(a * b for a, b in imap(itemgetter(1, 2), x)))
35
刚打开包装:
print(sum(a * b for _, a, b, _ in x))
或索引:
print(sum(sub[1] * sub[2] for sub in x))
如果速度是您的主要考虑因素并且可以解压缩,那么sum(a * b for _, a, b, _ in x)
应该是最快的sum(sub[1] * sub[2] for sub in x)
并且使用列表实际上会更快但显然会占用更多内存。