假设我有一个list a=[[1,2],[1.00000001,2.000000001],[2,3],[4,5],[4.0000000002,5.0000006]],因此我只想获得a=[[1,2],[2,3],[4,5]],因为其他列表中的所有元素都接近列表中的其他元素。我们如何在Python中做到这一点?set可以在某种程度上使用吗?
我尝试使用numpy的allclose函数,但是接下来我们必须比较列表a中的所有n(n-1)/2对,这显然是效率低下的。有没有一种更有效的毕达通方法来做到这一点?
编辑:我刚才在示例中使用了一些整数,输入通常是浮动的。
发布于 2021-04-19 08:40:57
如果值是这样的(例如,看起来像浮点不准确的值,您可以将值舍入到您感兴趣的精度,那么使用set()将事情简化为唯一的元组:
>>> a=[[1,2],[1.00000001,2.000000001],[2,3],[4,5],[4.0000000002,5.0000006]]
>>> a_r = [tuple(round(v, 2) for v in pair) for pair in a]
[(1, 2), (1.0, 2.0), (2, 3), (4, 5), (4.0, 5.0)]
>>> set(a_r)
{(2, 3), (4, 5), (1, 2)}发布于 2021-04-19 10:00:42
对于列表中的数据示例和预期的结果,由于可以使用Numpy,我建议使用dtype将其转换为整数并使用numpy.unique。
所以,根据你的清单:
a=[[1,2],[1.00000001,2.000000001],[2,3],[4,5],[4.0000000002,5.0000006]]你可以这样做:
import numpy as np
a_np = np.unique(np.array(a, dtype=np.uint), axis=0)
print(a_np)
# [[1 2]
# [2 3]
# [4 5]]https://stackoverflow.com/questions/67158658
复制相似问题