如何将多个索引替换为其各自列表的一个for循环?

时间:2017-12-02 16:41:01

标签: python python-2.7 for-loop

比如说,我想编写一个代码,从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个条目时。有更好的方法吗?

4 个答案:

答案 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-expressionsum一起执行此操作,以获取任何长度的列表(只要它们的长度相同)。

answer = sum(a[i] * b[i] * c[i] for i in range(len(a)))

answer作为:

1383