a=['0.0','123.34'] #list
b=['0.0','123.34']
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
isclose(a,b)
錯誤:
TypeError: unsupported operand type(s) for -: 'list' and 'list'
我試圖比較 python 中的兩個浮點串列,但得到了錯誤。如果匹配,否則顯示不匹配。任何人都可以幫助我并為我提供另一種方法。
uj5u.com熱心網友回復:
您的代碼中沒有 numpy。
你有字串串列——不是浮點數。您使用的方法對數字而不是字串進行操作。
(對于浮點數)有一種比較浮點數的現有方法:math.isclose
如果要比較串列,則需要迭代串列。如果要檢查浮點數,則需要在檢查之前轉換為浮點數:
# use what already exists
from math import isclose
a = ['0.0','123.34','42']
b = ['0.0','123.34','3.141']
r = []
# same length lists, use zip to iterate pairwise, use enumerate for index
for idx, (aa, bb) in enumerate(zip(a,b)):
# convert to floats
aaa = float(aa)
bbb = float(bb)
# append if not close
if not isclose(aaa,bbb):
r.append((idx, (aaa,bbb)))
# print results
for w in r:
print("On index {0} we have {1} != {2}".format(w[0],*w[1]), sep="\n")
輸出:
On index 2 we have 42.0 != 3.141
uj5u.com熱心網友回復:
您不能將“-”運算子與串列一起使用。代碼abs(a-b)
首先嘗試做a-b
它不能做的事情,a
并且b
是串列。
您可以撰寫一個函式,從 listb
中的每個相應索引中減去 list 中的每個索引,a
并將每個計算的結果放在具有相同索引的新串列中。
或者使用 numpy 的numpy.subtract()
方法來執行此計算。
此外,abs()
不能在串列物件上使用,您可以撰寫自己的代碼來迭代串列中的每個元素并計算每個元素的絕對值或使用 numpy's numpy.absolute()
。
uj5u.com熱心網友回復:
使用 python,您不能從彼此中減去串列物件。此外,您不能相互減去 str 物件。
你可以用 oneline 做到這一點:
a=['0.0','123.34'] #list
b=['0.0','123.34']
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
return all([True if abs(float(i)-float(j)) <= max(rel_tol * max(abs(float(i)), abs(float(j))), abs_tol) else False for i,j in zip(a,b) ])
isclose(a,b)
如果串列的兩個元素都接近,則回傳 True
問候
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478285.html
上一篇:如何獲取熊貓資料框中串列的平均值