Multiply从Python中的两个单独列表中浮动

时间:2014-10-20 16:40:05

标签: python list loops iterator

在我的代码中,我有两个单独的列表。我想将list [0]的值乘以list2 [0],列表[1]乘以list2 [1],依此类推。

value = []
quantity = []

for line in fh:
    if line.startswith("Value"):
        line = line[18:len(line)]
        line = float(line)
        value.append(line)

for line2 in fh:
    if line2.startswith("Amount"):
        line2 = line2[17:len(line2)]
        line2 = float(line2)
        quantity.append(line2)

首先,我的“数量”列表中出现了“列表索引超出范围”。这是为什么?

然后乘以这样的工作吗?

total = 0.0
temp = 0.0

for i in range(len(value))
    temp = value[i]*quantity[i]
    total = total + temp

3 个答案:

答案 0 :(得分:3)

fillvalue 1使用itertools.izip_longest,如果列表长度不同,则将最长列表的元素乘以1。

from itertools import izip_longest

l1 = [1,2,3,4]
l2 = [1,2,3,4,5]
print([x*y for x,y in (izip_longest(l1,l2,fillvalue=1))])
[1, 4, 9, 16, 5]

答案 1 :(得分:2)

您可以zip列表,而不是遍历对并乘以它们。然后sum结果列表。

total = sum([val * quant for val, quant in zip(value, quantity)])

例如

>>> value = [2,1,5,3,6]
>>> quantity = [2,1,0,6,2]
>>> total = sum([val * quant for val, quant in zip(value, quantity)])
>>> total
35

答案 2 :(得分:1)

您遍历fh两次,但第一次迭代耗尽了文件,任何后续迭代都不会产生任何值。因此,永远不会附加quantity。如果你想取消文件,请尝试回到开头。

fh.seek(0)
for line2 in fh:
    #...

编辑:或者只是将第二个if块放在第一个循环中。

for line in fh:
    if line.startswith("Value"):
        line = line[18:len(line)]
        line = float(line)
        value.append(line)
    else if line2.startswith("Amount"):
        line = line[17:len(line)]
        line = float(line)
        quantity.append(line)