簡體   English   中英

從Python中兩個單獨的列表中乘以浮點數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM