比如说,我想编写一个代码,从3个或更多列表中获取条目,将它们相乘,然后将它们相加。即:
a = [1,2,3,5]
b = [12,69,5,4]
c = [7,8,9,3]
answer = 0.0
for i,j,k in a,b,c:
answer+= i*j*k
print answer
使得它执行类似于(1)(12)(7)+(2)(69)(8)+(3)(5)(9)+(5)(4)(3)的操作。我不确定为什么我会收到错误"太多的值要解包"当列表有超过4个条目时,"需要两个以上的值才能解压缩"当列表有2个条目时。有更好的方法吗?
答案 0 :(得分:0)
您可以使用内置sum
功能:
a = [1,2,3,5]
b = [12,69,5,4]
c = [7,8,9,3]
answer = sum(d*e*f for d, e, f in zip(a, b, c))
答案 1 :(得分:0)
您收到该错误,因为a,b,c
会创建一个包含您提供的每个列表的元组。
似乎zip
会做你期望的事。 https://docs.python.org/2/library/functions.html#zip
它会从您提供的列表中返回一个元组列表,您可以在for循环中解压缩:
a = [1,2,3,5]
b = [12,69,5,4]
c = [7,8,9,3]
answer = 0.0
for i,j,k in zip(a,b,c):
answer+= i*j*k
print answer
其中给出了答案1383.0
亚历
答案 2 :(得分:0)
另一种做法
from itertools import chain
from operator import add
print reduce(add, list(chain(a,b,c)))
答案 3 :(得分:0)
您可以使用generator-expression
与sum
一起执行此操作,以获取任何长度的列表(只要它们的长度相同)。
answer = sum(a[i] * b[i] * c[i] for i in range(len(a)))
将answer
作为:
1383