在我的代码中,我有两个单独的列表。我想将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
答案 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)