Python - 列表列表与近似浮点数的比较

Bug*_*gsy 0 python compare list

我对编程有点陌生,我想比较 python 中的两个列表列表,而这些列表中的浮点数可能有错误。这里有一个例子:

first_list = [['ATOM', 'N', 'SER', -1.081, -16.465,  17.224], 
              ['ATOM', 'C', 'SER', 2.805, -3.504,  6.222], 
              ['ATOM', 'O', 'SER', -17.749, 16.241,  -1.333]]

secnd_list = [['ATOM', 'N', 'SER', -1.082, -16.465,  17.227],
              ['ATOM', 'C', 'SER', 2.142, -3.914,  6.222], 
              ['ATOM', 'O', 'SER', -17.541, -16.241,  -1.334]]
Run Code Online (Sandbox Code Playgroud)

预期输出:

Differences = ['ATOM', 'C', 'SER', 2.805, -3.504,  6.222]
Run Code Online (Sandbox Code Playgroud)

到目前为止我的尝试:

def aprox (x, y):
    if x == float and y == float:
        delta = 0.2 >= abs(x - y)
        return delta
    else: rest = x, y
    return rest

def compare (data1, data2):
    diff = [x for x,y in first_list if x not in secnd_list and aprox(x,y)] + [x for x,y in secnd_list if x not in first_list and aprox(x,y)]
    return diff
Run Code Online (Sandbox Code Playgroud)

或者在元组的帮助下,但我不知道如何构建近似值:

def compare (data1, data2):
    first_set = set(map(tuple, data1))
    secnd_set = set(map(tuple, data2))
    diff = first_set.symmetric_difference(secnd_set)
    return diff
Run Code Online (Sandbox Code Playgroud)

希望你能帮我!:)

小智 5

线路

if x == float and y == float
Run Code Online (Sandbox Code Playgroud)

不准确...检查变量类型的正确方法是使用该type()函数...尝试将上面的行替换为

if type(x) is float and type(y) is float:
Run Code Online (Sandbox Code Playgroud)