[英]How do I substitute multiple indices into one for loop for their respective list?
举例来说,我想编写一个代码,该代码从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个条目时却提示“需要两个以上的值要解包”。 有一个更好的方法吗?
您可以使用内置的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))
之所以会出现此错误,是因为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
亚历克斯
只是这样做的另一种方法
from itertools import chain
from operator import add
print reduce(add, list(chain(a,b,c)))
您可以使用带有sum
的generator-expression
在一行中针对任何长度的列表(只要它们的长度相同)执行此操作。
answer = sum(a[i] * b[i] * c[i] for i in range(len(a)))
给出的answer
为:
1383
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.