[英]Multiply floats from two separate lists in Python
在我的代碼中,我有兩個單獨的列表。 我想將list [0]的值乘以list2 [0],將list [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
使用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]
您可以將列表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
您遍歷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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.