给出公差比较列表中的浮点数[重复]

Posted

技术标签:

【中文标题】给出公差比较列表中的浮点数[重复]【英文标题】:Give tolerance comparing floats in list [duplicate] 【发布时间】:2020-08-02 01:52:07 【问题描述】:

我知道在比较浮点数时要给予一定的容忍度。 我可以使用,

math.isclose(0.0005, 0.0006, abs_tol = 0.0002)

它会给出 True 作为响应。

但是假设我们有两个列表

number_list_1 = [1.15679, 0.000435343, 0.009432, 10.0, 0.5678]
number_list_2 = [1.157, 0.00044, 0.0094, 10.0, 0.568]

如您所见,两个列表的元素具有几乎相同的值,但修改略有不同。

如果我比较两个列表,如何返回 True 值?

【问题讨论】:

使用 for 循环遍历所有元素并使用 math.isclose(l1[i], l2[i], abs)? 另外,大多数math 函数都有一个numpy 等效项。如果您愿意使用该软件包,使用 numpy.isclose 会得到您想要的。 【参考方案1】:

作为一个单行,你可以zip()这两个列表,然后使用all()

import math
number_list_1 = [1.15679, 0.000435343, 0.009432, 10.0, 0.5678]
number_list_2 = [1.157, 0.00044, 0.0094, 10.0, 0.568]
print(all((math.isclose(n1, n2, abs_tol = 0.0002) for n1, n2 in zip(number_list_1, number_list_2))))

或者,如果您想要更明确的内容:

def is_close(n1, n2, abs_tol=0.0002):
    if len(n1) != len(n2):
        return False    
    for n1, n2 in zip(n1, n2):
        if not math.isclose(n1, n2, abs_tol=abs_tol):
            return False            
    return True
print(is_close(number_list_1, number_list_2))

【讨论】:

理解作为生成器表达式比临时列表更好 @MadPhysicist 很好,更新了我的答案【参考方案2】:
import math

number_list_1 = [1.15679, 0.000435343, 0.009432, 10.0, 0.5678]
number_list_2 = [1.157, 0.00044, 0.0094, 10.0, 0.568]

for x in range(len(number_list_1)):
    for y in range(len(number_list_2)):
        print (number_list_1[x],number_list_2[y], math.isclose(x, y, abs_tol = 0.0002))

【讨论】:

以上是关于给出公差比较列表中的浮点数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Lua和C++中的浮点数的比较

Lua和C++中的浮点数的比较

将结构与 rust 中的浮点数进行比较

比较 Unity 中的浮点数

如何将列表中的字符串值更改为 Python 中的浮点数

与霓虹内在函数中的浮点数比较