簡體   English   中英

比較 python 中的兩個浮點列表字符串

[英]compare two float list strings in python

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 中的兩個 float 列表,但得到了錯誤。 如果匹配否則顯示不匹配。 任何人都可以幫助我並為我提供另一種方法來做到這一點。

您的代碼中沒有 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")

Output:

On index 2 we have 42.0 != 3.141

您不能對列表使用“-”運算符。 代碼abs(ab)首先嘗試做它不能做的ab ,因為ab是列表。

您可以編寫一個 function 從列表a中的每個對應索引中減去列表b中的每個索引,並將每個計算的結果放入具有相同索引的新列表中。

或者使用 numpy 的numpy.subtract()方法來執行此計算。

此外, abs()不能用在列表 object 上,您可以編寫自己的代碼來遍歷列表中的每個元素並計算每個元素的絕對值,或者使用 numpy 的numpy.absolute()

使用 python,您不能將列表 object 從彼此中減去。 此外,您不能從彼此減去 str object。

你可以用 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

你好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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