繁体   English   中英

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

[英]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)))

您可以使用带有sumgenerator-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM