【发布时间】:2017-08-20 09:56:23
【问题描述】:
我对编程有点陌生,我想比较 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]]
预期输出:
Differences = ['ATOM', 'C', 'SER', 2.805, -3.504, 6.222]
到目前为止我的尝试:
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
或者在元组的帮助下,但我不知道如何建立近似值:
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
希望你能帮助我! :)
【问题讨论】:
-
您最初的
compare函数具有参数data1和data2,但随后您引用了(全局?)对象first_list和secnd_list并且从不使用参数。 -
fyi
isinstance(x, float)是你应该如何检查号码类型 -
您的预期输出错误,应该是 2 行,因为根据您的代码,有 2 行的差异大于 0.2。